我收到了一些格式非常糟糕的数据,因此我希望将其处理为更好的格式以供使用。我的目标是将数据拆分出来并按位置顺序放回到数据框中。例如,这里我有 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
抱歉,这不是最好的措辞问题,请随意对原始数据做任何你想做的事情,它不必被分割,我只是认为这是一个很好的开始方式
假设
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