我想跟进我发布的问题here。在我收到baseR
和data.table
解决方案的同时,我尝试使用splitstackshape包中的cSplit_e
实现相同的操作,如我之前帖子的评论中所建议的那样。使用如下修改的数据(即使用NA),
data1<-structure(list(reason = c("1", "1", NA, "1", "1", "4 5", "1",
"1", "1", "1", "1", "1 2 3 4", "1 2 5", NA, NA)), .Names = "reason", class = "data.frame", row.names = c(NA,
-15L))
#loading packages
library(data.table)
library(splitstackshape)
cSplit_e(setDT(data1),1," ",mode = "value") # with NA's doesn't work
Error in seq.default(min(vec), max(vec)) : 'from' must be a finite number
data2<-na.omit(setDT(data1),cols="reason") # removing NA's
cSplit_e(data2,1," ",mode = "value") # without NA's works
reason reason_1 reason_2 reason_3 reason_4 reason_5
1: 1 1 NA NA NA NA
2: 1 1 NA NA NA NA
3: 1 1 NA NA NA NA
4: 1 1 NA NA NA NA
5: 4 5 NA NA NA 4 5
6: 1 1 NA NA NA NA
7: 1 1 NA NA NA NA
8: 1 1 NA NA NA NA
9: 1 1 NA NA NA NA
10: 1 1 NA NA NA NA
11: 1 2 3 4 1 2 3 4 NA
12: 1 2 5 1 2 NA NA 5
那么,问题是cSplit_e
是否会将要分割的列中的NA考虑在内?
答案 0 :(得分:1)
已在“splitstackshape”的错误修复版本(v1.4.4)中修复此问题。感谢您报告。
使用update.packages()
后,您应该可以:
packageVersion("splitstackshape")
## [1] ‘1.4.4’
cSplit_e(data1, 1, " ", mode = "value")
## reason reason_1 reason_2 reason_3 reason_4 reason_5
## 1 1 1 NA NA NA NA
## 2 1 1 NA NA NA NA
## 3 <NA> NA NA NA NA NA
## 4 1 1 NA NA NA NA
## 5 1 1 NA NA NA NA
## 6 4 5 NA NA NA 4 5
## 7 1 1 NA NA NA NA
## 8 1 1 NA NA NA NA
## 9 1 1 NA NA NA NA
## 10 1 1 NA NA NA NA
## 11 1 1 NA NA NA NA
## 12 1 2 3 4 1 2 3 4 NA
## 13 1 2 5 1 2 NA NA 5
## 14 <NA> NA NA NA NA NA
## 15 <NA> NA NA NA NA NA
请注意,1.4.4已将“data.table”从“依赖”移动到“导入”。