r - 循环遍历 2 个数据框以识别常见列
问题描述
我在这里有 2 个可重现的数据框。我试图确定哪一列包含与另一列相似的值。我希望我的代码将包含每一行并遍历 df2 中的每一列。我的代码在下面工作,但需要微调以允许同一列的多个匹配项。
df1 <- data.frame(fruit=c("Apple", "Orange", "Pear"), location = c("Japan", "China", "Nigeria"), price = c(32,53,12))
df2 <- data.frame(grocery = c("Durian", "Apple", "Watermelon"),
place=c("Korea", "Japan", "Malaysia"),
name = c("Mark", "John", "Tammy"),
favourite.food = c("Apple", "Wings", "Cakes"),
invoice = c("XD1", "XD2", "XD3"))
df <- sapply(names(df1), function(x) {
temp <- sapply(names(df2), function(y)
if(any(match(df1[[x]], df2[[y]], nomatch = FALSE))) y else NA)
ifelse(all(is.na(temp)), NA, temp[which.max(!is.na(temp))])
}
)
t1 <- data.frame(lapply(df, type.convert), stringsAsFactors=FALSE)
t1 <- data.frame(t(t1))
t1 <- cbind(newColName = rownames(t1), t1)
rownames(t1) <- 1:nrow(t1)
colnames(t1) <- c("Columns from df1", "Columns from df2")
df1
fruit location price
1 Apple Japan 32
2 Orange China 53
3 Pear Nigeria 12
df2
grocery place name favourite.food invoice
1 Durian Korea Mark Apple XD1
2 Apple Japan John Wings XD2
3 Watermelon Malaysia Tammy Cakes XD3
t1 #(OUTPUT FROM CODE ABOVE)
Columns from df1 Columns from df2
1 fruit grocery
2 location place
3 price <NA>
这是我希望获得的输出:
Columns from df1 Columns from df2
1 fruit grocery, favourite.food
2 location place
3 price <NA>
请注意,“Grocery”和“favourite.food”列都与“fruit”列匹配,而我的代码只返回一列。
解决方案
我们可以更改代码以返回所有匹配项并将它们包装在一个字符串中toString
vec <- sapply(names(df1), function(x) {
temp <- sapply(names(df2), function(y)
if(any(match(df1[[x]], df2[[y]], nomatch = FALSE))) y else NA)
ifelse(all(is.na(temp)), NA, toString(temp[!is.na(temp)]))
}
)
vec
# fruit location price
#"grocery, favourite.food" "place" NA
要将其转换为数据框,我们可以这样做
data.frame(columns_from_df1 = names(vec), columns_from_df2 = vec, row.names = NULL)
# columns_from_df1 columns_from_df2
#1 fruit grocery, favourite.food
#2 location place
#3 price <NA>
推荐阅读
- json - 如何从 json url 获取不存在的封面图片链接?
- azure - 如何使用 azure 存储帐户的诊断设置(经典)版本 2 日志查找 Azure blob 容器大小
- python - DynamoDB 查询 IP 地址过期的用户
- python - DRF 表单数据。将 querydict 中的参数作为一个元素的列表传递
- javascript - 需要帮助从 javascript 中的点击函数获取值
- python - Pims.open 在一台机器上抛出带有“无效参数”的“UnkownFormat 错误”,但在另一台机器上却没有
- swift - 当 appStorage var 更改时,如何使我的代码不更改
- c++ - 模板化向下转换为派生类并调用相应的方法
- python - 在 ipython 的交互小部件后面捕获/抑制函数的返回值
- r - 向ggmap添加图例