我有2个数据帧:
t:
med score
a 3
b 1
v 2
c 2
f 1
和
p:
med score
a 1
b 1
v 2
c 3
f 3
我正在使用dplyr包来过滤得分== 1的所有行:
t %>% filter(score == 1)
我得到了:
med score
b 1
f 1
我想去p df,过滤上面的行(b,f)并将它们更新为3。
出于某种原因,p %>% filter(med == t[[1]])
无效。
请告知我如何实现上述目标。
P.S 这就是我在做的事情:
temp <- p %>% filter(score == 1)
我想做这样的事情:
n <- filter(t, med == temp[[1]])
然后根据subf n将t的分数更新为例如。
答案 0 :(得分:2)
t = read.table(text = "
med score
a 3
b 1
v 2
c 2
f 1
", header = T, stringsAsFactors = F)
p = read.table(text = "
med score
a 1
b 1
v 2
c 3
f 3
", header = T, stringsAsFactors = F)
# get the med values from p where score = 1
# save them as a vector
med_p = p$med[p$score == 1]
# update values in corresponding rows of t
t$score[t$med %in% med_p] = 3
# updated t
t
# med score
# 1 a 3
# 2 b 3
# 3 v 2
# 4 c 2
# 5 f 1
你在评论中提到了一些功能,所以如果这是一个更大的过程的一部分你可以使用这个过程(我的答案)作为一个函数:
t = read.table(text = "
med score
a 3
b 1
v 2
c 2
f 1
", header = T, stringsAsFactors = F)
p = read.table(text = "
med score
a 1
b 1
v 2
c 3
f 3
", header = T, stringsAsFactors = F)
UpdateTable = function(dt_to_update, dt_control, input, update) {
med_p = dt_control$med[dt_control$score == input]
dt_to_update$score[dt_to_update$med %in% med_p] = update
dt_to_update
}
# old version
t
# med score
# 1 a 3
# 2 b 1
# 3 v 2
# 4 c 2
# 5 f 1
# update version using the function
UpdateTable(t,p,1,3)
# med score
# 1 a 3
# 2 b 3
# 3 v 2
# 4 c 2
# 5 f 1