r-如何为新列中的不同行分配不同的值

  • 本文关键字:分配 新列中 r dplyr
  • 更新时间 :
  • 英文 :


我正试图将值的原子向量分配给由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"]

最新更新