在最近的一个项目中,我有一个相当大的数据框架,我想用我之前定义的向量重新编程某些变量。
我知道有很多其他的方法来重新编码数据,但我想知道我是否可以使用向量,因为它似乎是一个优雅的解决方案。
df <- data.frame(
A = c(1,2,2,1),
B = c(1,1,1,2),
C = c(2,2,1,2)
)
vector <- c(
"A",
"B"
)
考虑这个例子。这里我已经创建了一个向量,它由数据集中的2个名称组成。现在我可以使用这个向量来重新编程数据框吗?例如,我想将列'A'和'B'中的所有'1'改为'0'。
我试过这个:
df[df[,vector]==1] <- 0
然而,这段代码只工作,当我这样定义的向量:
vector <- c(
"A",
"B",
"C"
)
因此,当它包含数据框中的所有变量时。
如果我使用相同的代码,但向量只包含'A'和'B',则会出现以下错误:
Error in `[<-.data.frame`(`*tmp*`, df[, vector] == 2, value = 1) :
unsupported matrix index in replacement
你有什么想法,这可能会如何工作?
此致
2条答案
按热度按时间ebdffaop1#
您可以从
dplyr
使用mutate(across())
。eyh26e7m2#
一个基本的方法可以是用
vector
子集化df
,然后在df[vector]==1
中子集化这个。另一种方法是使用for循环。
基准
for
循环比其他 base 变体快约3倍,比 dplyr 变体快约50倍。所有 base 变体使用的内存都比 dplyr 变体少。