小编AGU*_*GUY的帖子

合并具有多个匹配项的数据帧时,仅选择第一行

我有两个数据框,"数据"和"分数",并希望将它们合并到"id"列:

data = data.frame(id = c(1,2,3,4,5),
                  state = c("KS","MN","AL","FL","CA"))
scores = data.frame(id = c(1,1,1,2,2,3,3,3),
                    score = c(66,75,78,86,85,76,75,90))
merge(data, scores, by = "id")                  
semi_join(data, scores, by = "id")                  
Run Code Online (Sandbox Code Playgroud)

在"得分"数据中,存在具有多个观察的"id",其中每个匹配在连接之后获得一行.见?merge:

如果有多个匹配,则所有可能的匹配每个贡献一行.

但是,我想只保留与表中第一个匹配对应的行scores.

半连接本来不错,但我无法从右表中选择得分.

有什么建议?

join r

11
推荐指数
3
解决办法
7788
查看次数

创建一个新的数据框,它将充当包含键和值对的字典

我正在处理一些数据并尝试创建一个新的数据框,其中包含可能是字典的键和值对。以下是一些示例数据和快速手动解决方案。

df = data.frame(col1 = c("one", "one", "two", "two", "one"),
                col2 = c("AG", "AB", "AC", "AG", "AB"),
                col3 = c("F3", "F1", "F2", "F3", "F2") )
df
d1 = data.frame(vals = unique(df$col1))
d2 = data.frame(vals = unique(df$col2))
d3 = data.frame(vals = unique(df$col3))
d1 
d2 
d3
d1$name = "col1"
d2$name = "col2"
d3$name = "col3"
d1
d2
d3
rbind(d1,d2,d3)
Run Code Online (Sandbox Code Playgroud)

当然,这是一个简单的用例,因此真实数据会更加普通。因此,我正在寻找一个可以遍历并在字典中设置键值对的循环。

我的大部分尝试都以失败告终。这是我的解决方案的格式,但我不确定如何动态创建 new_df 字典。有什么建议么?

new_df=data.frame()
prod.cols = c("col1", "col2", "col3")
for(col in prod.cols){
  if(col %in% colnames(df)){
    ## solution in here
  }
}

new_df
Run Code Online (Sandbox Code Playgroud)

r

0
推荐指数
1
解决办法
4039
查看次数

标签 统计

r ×2

join ×1