gpt4 book ai didi

r - 使用 mapply 在数据帧中进行间接寻址

转载 作者:行者123 更新时间:2023-12-05 00:48:21 27 4
gpt4 key购买 nike

使用以下两个数据框

> d1
keystr keynum
1 abc 5
2 def 2
3 def 7
4 abc 3

> d2
HD 2 3 5 7
1 abc H I J K
2 def L M N P

我想插入一列 d1$val 使用 keystr 中的字符串和 keynum 中的数字作为 d2 中的索引数据框。结果应该是:
> d1
keystr keynum val
1 abc 5 J
2 def 2 L
3 def 7 P
4 abc 3 I

这应该是 mapply 的间接应用。我怎样才能制作下面的代码
d1 <- data.frame("keystr"=c("abc","def","def","abc"), "keynum"=c(5,2,7,3))
d2 <- data.frame("HD"=c("abc","def"),
"2"=c("H","L"), "3"=c("I","M"),
"5"=c("J","N"), "7"=c("K","P"))
d1$val <- mapply(function(kstr,knum) d2[kstr,knum],
d1$keystr, d1$keynum )

以这种(间接)方式访问条目?

最佳答案

我们可以对数据框进行变换,然后通过进行合并。和 .

library(dplyr)
library(tidyr)

d3 <- d2 %>%
gather(keynum, letter, -HD) %>%
mutate(keynum = as.numeric(sub("X", "", keynum)))

d4 <- d1 %>%
left_join(d3, by = c("keystr" = "HD", "keynum"))
d4
# keystr keynum letter
# 1 abc 5 J
# 2 def 2 L
# 3 def 7 P
# 4 abc 3 I

数据

请注意,我设置了 stringsAsFactors = FALSE创建数据框时。
d1 <- data.frame("keystr"=c("abc","def","def","abc"), "keynum"=c(5,2,7,3),
stringsAsFactors = FALSE)
d2 <- data.frame("HD"=c("abc","def"),
"2"=c("H","L"), "3"=c("I","M"),
"5"=c("J","N"), "7"=c("K","P"),
stringsAsFactors = FALSE)

关于r - 使用 mapply 在数据帧中进行间接寻址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49681270/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com