R 循环遍历数据框中的元素,并根据条件添加一行
我有这样一个数据帧:R 循环遍历数据框中的元素,并根据条件添加一行,r,dataframe,R,Dataframe,我有这样一个数据帧: > df <- data.frame(var1 = c("1 Merge 2 ","3"), + var2 = c("1","2 Merge 3"), + var3 = "1") > df var1 var2 var3 1 1 Merge 2 1 1 2 3 2 Merge 3 1 更新: 另一种情况是,当我们
> df <- data.frame(var1 = c("1 Merge 2 ","3"),
+ var2 = c("1","2 Merge 3"),
+ var3 = "1")
> df
var1 var2 var3
1 1 Merge 2 1 1
2 3 2 Merge 3 1
更新:
另一种情况是,当我们有多个带有“Merge”的列时:
> df
var1 var2 var3
1 1 Merge 2 Merge 4 1 1 Merge 2
2 3 2 Merge 3 1
> desired_df <- data.frame(var1 = c(1,1,2,2,4,4,3,3),
+ var2 = c(1,1,1,1,1,1,2,3),
+ var3 = c(1,2,1,2,1,2,1,1))
> desired_df
var1 var2 var3
1 1 1 1
2 1 1 2
3 2 1 1
4 2 1 2
5 4 1 1
6 4 1 2
7 3 2 1
8 3 3 1
您可以使用
tidyr::separate_rows()
通过将扩展示例放入循环中,您可以获得所需的结果,尽管我相信有更好的方法:
for(i in seq_along(df)) {
df <- separate_rows(df, i, sep = " Merge ")
}
df
var1 var2 var3
1 1 1 1
2 1 1 2
3 2 1 1
4 2 1 2
5 3 2 1
6 3 3 1
for(沿(df)方向的序列中的i){
df哇。太简单了。我试图硬编码,甚至没有想到有一个函数用于此。谢谢。快速跟进问题:当多个列对同一行进行“合并”时,这是否有效?我将更新此问题以使其清晰抱歉,我已经用最复杂的情况稍微更新了它。
df %>%
separate_rows(var1, sep = " Merge ") %>%
separate_rows(var2, sep = " Merge ") %>%
separate_rows(var3, sep = " Merge ")
library(tidyr)
df %>%
separate_rows(var1:var3, sep = " Merge ")
var1 var2 var3
1 1 1 1
2 2 1 1
3 3 2 1
4 3 3 1
for(i in seq_along(df)) {
df <- separate_rows(df, i, sep = " Merge ")
}
df
var1 var2 var3
1 1 1 1
2 1 1 2
3 2 1 1
4 2 1 2
5 3 2 1
6 3 3 1