我有一个数据框架,我在它上面创建新的列。其中一些依赖于现有的列。如果我在现有列的基础上创建一个新列,而不需要任何二进制操作,它就能正常工作。但是,如果我尝试基于现有列的某些二进制操作创建一个新列,就会得到一个错误。下面是我的代码:
d9 = data1 //data1 is a dataframe
d9['A/B/C'] <- numeric()
d9['A'] <- d9$INTERVAL
d9['B'] <- 0.75*d9$INTERVAL
d9['C'] <- 1
错误如下:
0.75 * d9$INTERVAL:二进制运算符的非数值参数
我也试过了:
d9['B'] <- as.numeric(0.75*d9$INTERVAL)
但是我仍然得到相同的错误。
我想如果你只有一列。
R
强制到尽可能低的维度。
所以添加drop=FALSE
(默认是drop=TRUE
),它工作。
另一种方式:如果你至少有两列,那么你的代码也将工作没有drop=FALSE
:
mtcars
数据集
的示例d9 <- mtcars[,1, drop=FALSE]
d9
new_cols <- c("A", "B", "C")
d9[new_cols] <- NA
d9
d9["A"] <- d9$mpg
d9["B"] <- d9$mpg*0.75
d9["C"] <- 1
d9
输出:
mpg A B C
Mazda RX4 21.0 21.0 15.750 1
Mazda RX4 Wag 21.0 21.0 15.750 1
Datsun 710 22.8 22.8 17.100 1
Hornet 4 Drive 21.4 21.4 16.050 1
Hornet Sportabout 18.7 18.7 14.025 1
Valiant 18.1 18.1 13.575 1
Duster 360 14.3 14.3 10.725 1
Merc 240D 24.4 24.4 18.300 1
Merc 230 22.8 22.8 17.100 1
Merc 280 19.2 19.2 14.400 1
Merc 280C 17.8 17.8 13.350 1
....