我从data.frame函数得到的cSplit似乎有问题。
在没有NAs的情况下,我无法从下面的代码中提取列:
data_places <- data_table[ , colSums(is.na(data_table)) == 0 ]输出是一个Named logi向量,而不是一个没有包含NAs行的列的data.frame。
这个问题主要是由于data.frame输出的cSplit函数的splitstackshape包。使用data.table包也会出现此问题。
我尝试创建一个新的data.frame,它提取cSplit函数的data.frame输出的列,上面的代码工作得很好。
cSplit的data.frame输出有什么问题吗?
下面是我的代码示例:
library(splitstackshape)
data <- data.frame(V1=c("Place1-Place1-Place1-Place1-Place3-Place5",
"Place1-Place4-Place2-Place3-Place3-Place5-Place5",
"Place6-Place6",
"Place1-Place2-Place3-Place4"))
data_table <- cSplit(data, "V1", sep="-", direction = "wide")
data_places <- data_table[ , colSums(is.na(data_table)) == 0 ]
data_places
str(data_places)发布于 2016-03-04 09:25:37
我们需要使用with=FALSE,因为cSplit的输出是data.table对象。
data_table[ , colSums(is.na(data_table)) == 0 , with=FALSE]
# V1_1 V1_2
#1: Place1 Place1
#2: Place1 Place4
#3: Place6 Place6
#4: Place1 Place2如果我们看看?data.table
默认情况下,with=TRUE和j在x的框架内进行计算;列名可以用作变量。当with=FALSE j是列名的字符向量或要选择的列位置的数字向量时,返回的值总是data.table。with=FALSE在data.table中经常用于动态地选择列。
另一种选择是使用Filter
Filter(function(x) all(!is.na(x)), data_table)https://stackoverflow.com/questions/35792167
复制相似问题