在子集函数中使用 select=-c() 会出现错误:一元运算符的参数无效

Chr*_*ina 4 r subset dataframe

我有一个矩阵,我想通过名称消除两列。\n我的代码是:

\n\n
trn_data = subset(trn_data, select = -c("Rye flour","Barley products"))\n
Run Code Online (Sandbox Code Playgroud)\n\n

但 R 给了我这样的错误消息:

\n\n
\n
Error in -c("Rye flour", "Barley products") : \n  invalid argument to unary operator\n
Run Code Online (Sandbox Code Playgroud)\n
\n\n

我试过这个

\n\n
trn_data = subset(trn_data, select = -c(Rye flour,Barley products))\n
Run Code Online (Sandbox Code Playgroud)\n\n

还返回错误\xef\xbc\x9a

\n\n
\n
Error: unexpected symbol in "trn_data=subset(trn_data,select =-c(Rye flour"\n
Run Code Online (Sandbox Code Playgroud)\n
\n\n

我怎样才能解决这个问题?有没有其他方法可以通过名称消除两列?

\n

M--*_*M-- 5

characters您不应提供的名称subset。这有效:

trn_data_subset <- subset(trn_data, select = -c(`Rye flour`,`Barley products`))
Run Code Online (Sandbox Code Playgroud)

如果列名中有空格,则应使用Grave Accent

这是使用数据集的示例mtcars

mtexapmple <- mtcars[1:4,]
names(mtexapmple)[1] <- "mpg with space"

mtexapmple
#>                mpg with space cyl disp  hp drat    wt  qsec vs am gear carb
#> Mazda RX4                21.0   6  160 110 3.90 2.620 16.46  0  1    4 4
#> Mazda RX4 Wag            21.0   6  160 110 3.90 2.875 17.02  0  1    4 4
#> Datsun 710               22.8   4  108  93 3.85 2.320 18.61  1  1    4 1
#> Hornet 4 Drive           21.4   6  258 110 3.08 3.215 19.44  1  0    3 1


subset(mtexapmple, select = -c(`mpg with space`, cyl))
#>                disp  hp drat    wt  qsec vs am gear carb
#> Mazda RX4       160 110 3.90 2.620 16.46  0  1    4    4
#> Mazda RX4 Wag   160 110 3.90 2.875 17.02  0  1    4    4
#> Datsun 710      108  93 3.85 2.320 18.61  1  1    4    1
#> Hornet 4 Drive  258 110 3.08 3.215 19.44  1  0    3    1
Run Code Online (Sandbox Code Playgroud)

你也可以这样做:

within(trn_data, rm(`Rye flour`,`Barley products`))
Run Code Online (Sandbox Code Playgroud)

或者

trn_data[, !(colnames(trn_data) %in% c("Rye flour","Barley products"))]
Run Code Online (Sandbox Code Playgroud)