使用 strsplit() 将向量操作为数据框

问题描述 投票:0回答:1

我收到了一些格式非常糟糕的数据,因此我希望将其处理为更好的格式以供使用。我的目标是将数据拆分出来并按位置顺序放回到数据框中。例如,这里我有 10 个数字,然后是一个正斜杠,我希望将其放入数据框中,每个列指示原始数据中的一个位置,这看起来像问题底部的 df ,我只是不确定如何从我已按位置将数据拆分为 df 形式的版本中获取信息。

 mydata
 "/0,2,5,6,2,5,0,0,0,0/0,0,8,1,4,,2,4,0,0/5,6,2,5,0,0,7,8,3,2\"

 mydata #step1
 [[1]]
 [1] "0"  "2"   "5"   "6"   "2"   "5"   "0"  "0"    "0"   "0"

[[2]]
 [1] "0"  "0"   "8"   "1"   "4"   "0"   "2"   "4"   "0"   "0"

[[3]]
 [1] "5"  "6"    "2"  "5"   "0"   "0"   "7"   "8"   "3"   "2"

mydf
p1  p2  p3  p4  p5  p6  p7  p8  p0  p10
0   2   5    6   2   5   0   0   0   0
0   0   8    1   4   0   2   4   0   0
5   6   2    5   0   0   7   8   3   2

抱歉,这不是最好的措辞问题,请随意对原始数据做任何你想做的事情,它不必被分割,我只是认为这是一个很好的开始方式

r
1个回答
0
投票

假设

mydata
中的反斜杠应该是正斜杠,我们可以用换行符替换正斜杠并使用
read.csv

dat <- read.csv(text = gsub("/", "\n", mydata), header = FALSE)
dat
#   V1 V2 V3 V4 V5 V6 V7 V8 V9 V10
# 1  0  2  5  6  2  5  0  0  0   0
# 2  0  0  8  1  4 NA  2  4  0   0
# 3  5  6  2  5  0  0  7  8  3   2

您在中间展示了一个

0
,目前是
NA
(由于
mydata
中的空单元格),我们可以通过以下方式轻松修复该问题:

dat[] <- lapply(dat, function(z) ifelse(is.na(z), 0, z))
dat
#   V1 V2 V3 V4 V5 V6 V7 V8 V9 V10
# 1  0  2  5  6  2  5  0  0  0   0
# 2  0  0  8  1  4  0  2  4  0   0
# 3  5  6  2  5  0  0  7  8  3   2
© www.soinside.com 2019 - 2024. All rights reserved.