首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法从数据帧中删除列,输出将变为逻辑向量

无法从数据帧中删除列,输出将变为逻辑向量
EN

Stack Overflow用户
提问于 2016-03-04 09:20:13
回答 1查看 73关注 0票数 2

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

在没有NAs的情况下,我无法从下面的代码中提取列:

代码语言:javascript
复制
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输出的列,上面的代码工作得很好。

cSplitdata.frame输出有什么问题吗?

下面是我的代码示例:

代码语言:javascript
复制
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)
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-03-04 09:25:37

我们需要使用with=FALSE,因为cSplit的输出是data.table对象。

代码语言:javascript
复制
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

代码语言:javascript
复制
Filter(function(x) all(!is.na(x)), data_table)
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35792167

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档