gpt4 book ai didi

r - 如何使用 R 中另一个数据框的值填充列

转载 作者:行者123 更新时间:2023-12-04 11:47:25 25 4
gpt4 key购买 nike

我有两个数据框。

df1 看起来像这样:

chr <- c("1","1","2")
pos <- c("1000","2000","2000")
df1=data.frame(cbind(tmp1,tmp2))
df1

chr pos
1 1000
1 2000
2 2000

df2 看起来像这样:

chr <- c("1","1","1","2","2")
start <- c("500","1500","2500","500","1500")
end <- c("1499","2499","3499","1499","2499")
state <- c("state1", "state2", "state1", "state3", "state4")
df2=data.frame(cbind(chr,start,end,state))
df2

chr start end state
1 500 1499 state1
1 1500 2499 state2
1 2500 3499 state1
2 500 1499 state3
2 1500 2499 state4

我想在第一个数据帧中添加一列 state,基于 df1$chr 列中的值与 df2$chrdf1$pos 中的值介于 df2$startdf2$end 之间。预期的最终结果如下所示:

chr    pos     state
1 1000 state1
1 2000 state2
2 2000 state4

如果 df2$start 中的值与 df1$pos 中的值相同,我知道如何执行此操作,但这是我正在努力解决的范围.

任何提示都会非常有用。

最佳答案

我们可以对 data.table 使用非等连接

library(data.table)
setDT(df1)[df2, state := state, on = .(chr, pos > start, pos < end)]
df1
# chr pos state
#1: 1 1000 state1
#2: 1 2000 state2
#3: 2 2000 state4

注意:构造data.frame时,避免data.frame(cbind因为cbind转换为矩阵matrix 只能包含一个类。直接使用 data.frame。示例数据的另一个问题是为“pos”、“start”使用字符串变量, 'end' 应该是numeric

数据

chr <- c("1","1","2")
pos <- c(1000,2000,2000)
df1 <- data.frame(chr, pos)
chr <- c("1","1","1","2","2")
start <- c(500,1500,2500,500,1500)
end <- c(1499,2499,3499,1499,2499)
df2 <- data.frame(chr, start, end, state)

关于r - 如何使用 R 中另一个数据框的值填充列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48415730/

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