2

data.frame我从cSplit函数中得到的似乎有问题。

NAs如果不使用以下代码,我将无法提取列:

data_places <- data_table[ , colSums(is.na(data_table)) == 0 ]

输出是一个Named logi向量,而不是一个data.frame没有具有 NA 行的列的向量。

该问题主要是由于包的功能的data.frame输出。使用该软件包也会出现此问题。cSplitsplitstackshapedata.table

我尝试创建一个新的来提取函数输出的data.frame列,并且上面的代码工作正常。data.framecSplit

任何想法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)
4

1 回答 1

2

我们需要使用一个对象with=FALSE作为输出。cSplitdata.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 - 默认情况下 with=TRUE 并且 j 在 x 的框架内进行评估;列名可以用作变量。当 with=FALSE j 是列名的字符向量或要选择的列位置的数字向量时,返回的值始终是 data.table。with=FALSE 通常在 data.table 中用于动态选择列。


另一种选择是使用Filter

Filter(function(x) all(!is.na(x)), data_table)
于 2016-03-04T09:25:37.523 回答