說我有這個 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)] )
}
它只回傳指定列名稱的向量,而不是回傳具有指定列的資料表:
[1] "a" "b"
[1] "a" "c"
我究竟做錯了什么?謝謝你。
uj5u.com熱心網友回復:
1)使用在最后的注釋中可重現地顯示的輸入添加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) 子集我們可以使用子集函式。它有一個 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")
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/343666.html
上一篇:如何重疊PCA圖中的不同資訊?
