Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/78.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 循环遍历数据框中的元素,并根据条件添加一行_R_Dataframe - Fatal编程技术网

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