我有兩個具有相同列結構的資料框(只是為了簡化,因為我的 dfs 擁有 40k 個觀察值)。
df1 <- data.frame(name = c("mark", "peter", "lily"),
column1= c(1,2,3),
column2 = c(4,5,6))
df2 <- data.frame(name = c("mark", "liam", "peter"),
column1 = c(7,8,9),
column2 = c(1,2,3))
您認為將函式逐行應用于匹配兩個資料幀的列但僅應用于匹配的行名的最優雅方法是什么?
在這個例子中:(df1$column1 df1$column2)/df2$column2
應該只應用于兩個 dfs 中的相應行“mark”和“peter”。
uj5u.com熱心網友回復:
也許像這樣......
library(dplyr)
df_combined<-df1%>%
left_join(df2, by="name") %>%
mutate(combined=(column1.x column2.x)/column2.y) %>%
filter(!is.na(combined)) %>%
select(name,combined)
df1 %>% left_join(df_combined)
#> name column1 column2 combined
#> 1 mark 1 4 5.000000
#> 2 peter 2 5 2.333333
#> 3 lily 3 6 NA
df2 %>% left_join(df_combined)
#> name column1 column2 combined
#> 1 mark 7 1 5.000000
#> 2 liam 8 2 NA
#> 3 peter 9 3 2.333333
由reprex 包(v2.0.1)于 2022 年 1 月 2 日創建
uj5u.com熱心網友回復:
甲基礎R溶液。首先merge
是資料框,然后選擇帶有grep
.
df_new <- merge(df1, df2, "name")
df_new
name column1.x column2.x column1.y column2.y
1 mark 1 4 7 1
2 peter 2 5 9 3
df_new$calc <- apply(df_new[,-1], 1, function(a)
sum(a[grep("\\.x",names(a))]) / a[grep("2\\.y",names(a))])
df_new
name column1.x column2.x column1.y column2.y calc
1 mark 1 4 7 1 5.000000
2 peter 2 5 9 3 2.333333
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/402285.html