循环动态列
Loop through dynamic columns
假设我有这个 df
require(data.table)
df <- data.table(a = 1:2
, b = 3:4
, c = 5:6
); df
a b c
1: 1 3 5
2: 2 4 6
我想一次获取 2 列,例如c('a', 'b') 然后是 c('a', 'c')。我试过了:
x <- c('b', 'c')
for (i in x)
{
print( df[, c('a', i)] )
}
它没有返回具有指定列的数据 table,而是只返回指定列名的向量:
[1] "a" "b"
[1] "a" "c"
我做错了什么?谢谢。
1) with 使用末尾注释中可重复显示的输入添加 with=FALSE
for (i in x) {
print( df[, c('a', i), with = FALSE] )
}
给予:
a b
1: 1 3
2: 2 4
a c
1: 1 5
2: 2 6
2) dot dot 这也可以工作并给出相同的结果。
for (i in x) {
cn <- c('a', i)
print( df[, ..cn] )
}
3) .SD 我们可以像这样将 .SD
与 .SDcols
一起使用:
for (i in x) {
print( df[, .SD, .SDcols = c("a", i)] )
}
4) subset 我们可以使用subset函数。它有一个 data.table 方法。
for (i in x) {
print( subset(df, select = c('a', i)) )
}
5) data.frame 此外,如果您使用数据框而不是 data.table 那么它可以在没有上述任何条件的情况下工作。
DF <- as.data.frame(df)
for (i in x) {
print( DF[, c('a', i)] )
}
给予:
a b
1 1 3
2 2 4
a c
1 1 5
2 2 6
备注
问题缺少 x
的库语句和定义,因此我们使用了以下内容。
library(data.table)
df <- data.table(a = 1:2
, b = 3:4
, c = 5:6
); df
x <- c("b", "c")
假设我有这个 df
require(data.table)
df <- data.table(a = 1:2
, b = 3:4
, c = 5:6
); df
a b c
1: 1 3 5
2: 2 4 6
我想一次获取 2 列,例如c('a', 'b') 然后是 c('a', 'c')。我试过了:
x <- c('b', 'c')
for (i in x)
{
print( df[, c('a', i)] )
}
它没有返回具有指定列的数据 table,而是只返回指定列名的向量:
[1] "a" "b"
[1] "a" "c"
我做错了什么?谢谢。
1) with 使用末尾注释中可重复显示的输入添加 with=FALSE
for (i in x) {
print( df[, c('a', i), with = FALSE] )
}
给予:
a b
1: 1 3
2: 2 4
a c
1: 1 5
2: 2 6
2) dot dot 这也可以工作并给出相同的结果。
for (i in x) {
cn <- c('a', i)
print( df[, ..cn] )
}
3) .SD 我们可以像这样将 .SD
与 .SDcols
一起使用:
for (i in x) {
print( df[, .SD, .SDcols = c("a", i)] )
}
4) subset 我们可以使用subset函数。它有一个 data.table 方法。
for (i in x) {
print( subset(df, select = c('a', i)) )
}
5) data.frame 此外,如果您使用数据框而不是 data.table 那么它可以在没有上述任何条件的情况下工作。
DF <- as.data.frame(df)
for (i in x) {
print( DF[, c('a', i)] )
}
给予:
a b
1 1 3
2 2 4
a c
1 1 5
2 2 6
备注
问题缺少 x
的库语句和定义,因此我们使用了以下内容。
library(data.table)
df <- data.table(a = 1:2
, b = 3:4
, c = 5:6
); df
x <- c("b", "c")