【发布时间】:2023-03-12 22:50:02
【问题描述】:
我知道这应该是一种更简单或更智能的方式来做我需要的事情,但几天后我还没有找到它。
我有 2 个需要使用额外条件合并的数据框。例如:
df1 <- data.frame(Username = c("user1", "user2", "user3", "user4", "user5", "user6"))
df2 <- data.frame(File_Name = c(rep("StudyABC", 5), rep("AnotherStudyCDE", 4)), Username = c("user1", rep(c("user2", "user3", "user4", "user5"),2)))
print(df1)
print(df2)
我需要在 df1 中创建 2 个名为 ABC 和 CDE 的新列,其中包含它们的“File_Name”值。当然,真实数据是数百行,没有排序,所以无法按范围选择。
我发现的一个解决方案(不优雅)是:
df2_filtered <- df2 %>% filter(str_detect(File_Name, "ABC"))
df1 <- left_join(df1, df2_filtered, by = "Username")
names(df1)[2] <- "ABC"
df2_filtered <- df2 %>% filter(str_detect(File_Name, "CDE"))
df1 <- left_join(df1, df2_filtered, by = "Username")
names(df1)[3] <- "CDE"
print(df1)
有没有最短的方法?因为我必须重复同样的逻辑 160 次。
谢谢
【问题讨论】:
-
您的原始数据中是否也只有 2 个新列(ABC 和 CDE)?或者在“学习”之后会有很多这样的列需要提取?
-
其实我会有 160 个不同的列,并且行名也会不同(这是我没有很好解释的),所以我有 Study1ABC、Study2ABC、StudyAnyNumberABC、...),所以我需要将 ABC 或 CDE 存在的所有行分组到 ABC 列下