我正试图将值的原子向量分配给由df行组成的原子向量:
library(dplyr)
df %>%
mutate(new_col= assign(c('A1', 'A2', 'A3', 'A4', 'A5'), c(10,25,35,45,50)))
然而,此代码输出下一个错误:
错误:
mutate()
输入new_col
出现问题。x输入new_col
无法回收到大小8。i输入CCD_ 4是CCD_。i输入new_col
的大小必须为8或1,而不是5。运行rlang::last_error()
查看错误发生的位置。Además:警告信息:1:mutate()
输入new_col
出现问题。i sólo el引物元素是一种可变的名称i输入CCD_ 10是CCD_。2:在赋值(c("A1","A2","A3","A4","A5"(中,c(10,25,35,45,50(:可变的名称
预期输出可能如下所示:
# A1 10
# A1 10
# A2 25
# A3 35
# A4 45
# A4 45
# A5 50
# A5 50
数据
df <- data.frame(legend=c('A1','A1' ,'A2', 'A3', 'A4', 'A4', 'A5', 'A5'))
我该如何调整管道?
我不认为assign
是您想要的。你可以用recode
来做这件事,它也是来自dplyr
:
library(dplyr)
df %>%
mutate(new_col = recode(legend, A1 = 10, A2 = 25, A3 = 35, A4 = 45, A5 = 50))
或者使用命名矢量:
v <- c("A1" = 10, "A2" = 25, "A3" = 35, "A4" = 45, "A5" = 50)
df %>%
mutate(new_col = recode(legend, !!!v))
# OR
df %>%
mutate(new_col = v[legend])
# In base R
df$new_col <- v[df$legend]
# OR
within(df, new_col <- v[legend])
输出
legend new_col
1 A1 10
2 A1 10
3 A2 25
4 A3 35
5 A4 45
6 A4 45
7 A5 50
8 A5 50
assign
用于为指定环境中的值分配名称:
a <- 1
assign("a", 1)
使用data.table
可以使用merge
library(data.table)
df <- data.frame(legend=c('A1','A1' ,'A2', 'A3', 'A4', 'A4', 'A5', 'A5'))
setDT(df)
df2 <- data.table(legend = paste0("A", 1:5), value = c(10,25,35,45,50))
merge(df,df2, by = "legend")
legend value
1 A1 10
2 A1 10
3 A2 25
4 A3 35
5 A4 45
6 A4 45
7 A5 50
8 A5 50
使用可以获得类似的结果
df2[df, on = "legend"] #As in you_lookup_datable[table, on ="key_column"]