在R中按列合并数字和字符?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在R中按列合并数字和字符?相关的知识,希望对你有一定的参考价值。
我有2个df:
df1 <- data.frame(m = c("m1","m2","m3"), score = c(2,3,3))
df2 <- data.frame(m = c("m3", "m2", "m1"), dosage = c("a", "b", "c"))
我想把它结合起来:
m1 m2 m3
2c 3b 3a
我尝试过使用paste命令但是我没有使用colnames。我应该使用连接还是有其他有效方法吗?
答案
我们可以通过'm'列做一个merge
(如果有常见的列名,它会在by
论证中提到它而不提及它),然后transform
通过paste
ing'得分'和'剂量来创建'新列' ',通过索引对列进行子集化
transform(merge(df1, df2), newcolumn = paste0(score, dosage))[c(1,4)]
如果我们需要一个名为vector
dfN <- merge(df1, df2)
setNames(do.call(paste0, dfN[-1]), dfN[,1])
# m1 m2 m3
#"2c" "3b" "3a"
另一答案
使用dplyr
和tidyr
的解决方案
df1 <- data.frame(m = c("m1","m2","m3"), score = c(2,3,3))
df2 <- data.frame(m = c("m3", "m2", "m1"), dosage = c("a", "b", "c"))
library(dplyr)
library(tidyr)
inner_join(df1, df2, by="m") %>% # join data
unite(v,score,dosage, sep = "") %>% # unite two columns in one column
spread(m,v) # reshape data
# m1 m2 m3
# 1 2c 3b 3a
这假设所有m
值都出现在两个数据集中。如果没有,您必须修改过程以匹配您的已排出输出。您是否忽略仅出现在一个数据集中的案例?你保留它们并填充NA吗?别的什么?
另一答案
使用data.table
和t
的另一种解决方案: -
df1 <- data.frame(m = c("m1","m2","m3"), score = c(2,3,3))
df2 <- data.frame(m = c("m3", "m2", "m1"), dosage = c("a", "b", "c"))
setDT(df1)
setDT(df2)
setkey(df2, m)
df <- df2[df1]
df[, dos := paste0(score, dosage)]
df <- df[, c("m", "dos")]
df <- t(df)
df
你会得到输出: -
[,1] [,2] [,3]
m "m1" "m2" "m3"
dos "2c" "3b" "3a"
以上是关于在R中按列合并数字和字符?的主要内容,如果未能解决你的问题,请参考以下文章