相关疑难解决方法(0)

根据矢量中的*not*选择R数据帧中的列

我很熟悉能够从R数据框(或矩阵)中提取列,如下所示:

df.2 <- df[, c("name1", "name2", "name3")]
Run Code Online (Sandbox Code Playgroud)

但是,可以使用一个!或其他工具来选择除列出的列之外的所有列吗?

对于背景,我有一个包含很多列向量的数据框,我想避免:

  • 当我可以删除少数人时,输入大多数名字
  • 使用更短的df.2 <- df[, c(1,3,5)]因为当我的.csv文件发生变化时,我的代码就变成了问题,因为编号不再相同了.我是R的新手,并且认为我已经学会了很难不使用数字向量来获得更大的df.

我试过了:

df.2 <- df[, !c("name1", "name2", "name3")]
df.2 <- df[, !=c("name1", "name2", "name3")]
Run Code Online (Sandbox Code Playgroud)

正如我输入这个,发现这有效:

df.2 <- df[, !names(df) %in% c("name1", "name2", "name3")]
Run Code Online (Sandbox Code Playgroud)

有没有比上一个更好的方法?

r subset dataframe

40
推荐指数
5
解决办法
5万
查看次数

如何使用某些列名的字符向量在data.table中选择列?

我试图在data.table中选择那些名称出现在我的角色向量中的列.该操作在纯data.frame中工作,但在data.table中不起作用.这是一个可重复的例子.

> names(mtcars)
 [1] "mpg"  "cyl"  "disp" "hp"   "drat" "wt"   "qsec" "vs"   "am"   "gear"
[11] "carb"
> myVector <- c('disp', 'hp', 'wt')
> head(mtcars[, myVector])
                  disp  hp    wt
Mazda RX4          160 110 2.620
Mazda RX4 Wag      160 110 2.875
Datsun 710         108  93 2.320
Hornet 4 Drive     258 110 3.215
Hornet Sportabout  360 175 3.440
Valiant            225 105 3.460
Run Code Online (Sandbox Code Playgroud)

我刚刚制作了一个包含disp,, hp和的矢量,并且wt我使用该矢量在我的data.frame中选择了相应的列.现在让我们从data.frame中创建一个data.table对象,并尝试执行相同的操作.

> library(data.table)
> mtcarsDT <- data.table(mtcars)
> mtcarsDT[, myVector]
[1] "disp" "hp"   "wt"  
Run Code Online (Sandbox Code Playgroud)

r data.table

28
推荐指数
1
解决办法
4万
查看次数

选择data.table中的列子集

我想打印数据表的所有列,dt除了其中一个已命名V3但不想按编号而是按名称引用它.这是我的代码:

  dt = data.table(matrix(sample(c(0,1),5,rep=T),50,10))
  dt[,-3,with=FALSE]   #  Is this the only way to not print column "V3"? 
Run Code Online (Sandbox Code Playgroud)

使用这种data frame方式,可以通过代码执行此操作:

  df = data.frame(matrix(sample(c(0,1),5,rep=T),50,10))
  df[,!(colnames(df)%in% c("X3"))]
Run Code Online (Sandbox Code Playgroud)

所以,我的问题是:是否有另一种方法不在数据表中打印一列而不必按编号引用它?我想找到类似于我上面使用的数据帧语法但使用数据表的东西.

r data.table

25
推荐指数
4
解决办法
2万
查看次数

为什么".."可以在字符向量变量中传递列名?

以下代码确实有效,但我找不到任何关于帮助和插图中" .."(点点)运算符的文档data.table:

library(data.table)
cols <- c("mpg", "gear")
DT <- as.data.table(mtcars)
DT[ , ..cols]
Run Code Online (Sandbox Code Playgroud)

输出是:

     mpg gear
 1: 21.0    4
 2: 21.0    4
 3: 22.8    4
 4: 21.4    3
 5: 18.7    3
...
Run Code Online (Sandbox Code Playgroud)

为什么这样做,是否有任何文件?

PS:通常我会使用mget等...

编辑1:这不是保留名称的一个简单的ř特征...,..1,..2等等,这些都是用来指从主叫功能(参见向下传递的参数?Reserved).我的例子不使用数字,而是使用两个点后的字符.

编辑2:这不重复,因为Rich Scriven的示例显示:

> mtcars[, ..cols]
Error in `[.data.frame`(mtcars, , ..cols) : object '..cols' not found
Run Code Online (Sandbox Code Playgroud)

r data.table

12
推荐指数
1
解决办法
610
查看次数

成语用于有条件地从data.table中选择列

我使用以下习惯来有条件地从data.frame中选择列:

DF = data.frame(a = 1:3,b = letters[1:3],c = LETTERS[1:3])
someCondition <- FALSE

# use `if(someCondition)` to conditionally include column 'c'
DF[,c('a','b',if(someCondition)'c')] 
:>   a b
:> 1 1 a
:> 2 2 b
:> 3 3 c
Run Code Online (Sandbox Code Playgroud)

但是等价物不适用于data.table的b/c NULL值不会从列表中删除,就像它们从连接中删除一样:

DT = as.data.table(DF)
DT[,.(a,b,if(someCondition)c)]
:> Error in setnames(jval, jvnames) : 
:>   Can't assign 3 names to a 2 column data.table
Run Code Online (Sandbox Code Playgroud)

我已经定义了一个函数..,它是一个解决方法:

.. <- function(...){
    x = list(...)
    x= x[!sapply(x,is.null)]
    x
}
DT[,..(a,b,if(someCondition)c)]
:>    V1 V2
:> 1:  1  a …
Run Code Online (Sandbox Code Playgroud)

r data.table

9
推荐指数
1
解决办法
672
查看次数

当列名在其他地方预定义时,R data.table 会遇到条件子集问题

假设我有一个数据表

library(data.table)
DT <- data.table(x=c(1,1,0,0),y=c(0,1,2,3))
column_name <- "x"

   x y
1: 1 0
2: 1 1
3: 0 2
4: 0 3
Run Code Online (Sandbox Code Playgroud)

我想访问 x = 1 的所有行,但使用 column_name。

所需的输出应如下所示:

DT[x==1,]
   x y
1: 1 0
2: 1 1
Run Code Online (Sandbox Code Playgroud)

但在输入中x被替换为。column_name

请注意,此问题与Select subset of columns in data.table R类似但不完全相同,并且那里的解决方案(使用 with=FALSE)在这里不起作用。

这是我尝试过的所有事情。它们都不起作用。

DT[column_name ==1,]
DT[.column_name ==1,]
DT[.(column_name) ==1,]
DT[..column_name ==1,]
DT[."column_name" ==1,]
DT[,column_name ==1,]
DT[,column_name ==1,with=TRUE]
DT[,column_name ==1,with=FALSE]
DT[,.column_name ==1,with=TRUE]
DT[,.column_name ==1,with=FALSE]
DT[,..column_name ==1,with=TRUE]
DT[,..column_name ==1,with=FALSE]
DT[,."column_name" ==1,with=TRUE]
DT[,.column_name ==1,with=FALSE] …
Run Code Online (Sandbox Code Playgroud)

r subset data.table

4
推荐指数
1
解决办法
344
查看次数

标签 统计

r ×6

data.table ×5

subset ×2

dataframe ×1