首页 > 解决方案 > 在R中循环数据帧直到满足某个条件

问题描述

我们有当前的数据框 df 如下

df <- data.frame(ID = c(1,2,3,4,5,6), Name = c("Chris", "J", "Kemp", "President,", "CEO & ", "Director", "Ashton", "K", "Christian", "Analyst"), 
                  Font = c("Font A", "Font A", "Font A", "Font B", "Font B", "Font B", "Font A", "Font A", "Font A", "Font B"))

预期的输出是

final_df <- data.frame(Name =  c("Chris J Kemp", "Ashton K Christian"), Designation = c("President, CEO & Director", "Analyst"))

所以基本上我想添加名称,直到在 Font 列中有某种字体类型,这当然是我正在处理的巨大数据框的一个示例。我在这里先向您的帮助表示感谢 !

对不起你之前的所有努力。这个问题已经被重新编辑了一点。

标签: rdataframeloops

解决方案


数据:

df <- data.frame(
  ID = c(1:12), 
  Name = c("Chris", "J", "Kemp", "President,", "CEO & ", "Director", 
           "Bad", "D", "King", "Best,", "Teacher & ", "Friend"), 
  Font = c("Font A", "Font A", "Font A", "Font B", "Font B", "Font B",
           "Font A", "Font A", "Font A", "Font B", "Font B", "Font B")
)

你可以做:

df$group <- cumsum(c(TRUE, df$Font[-1] != df$Font[-length(df$Font)]))
final_df <- as.data.frame(matrix(lapply(split(df$Name, df$group), paste, collapse = " "), ncol = 2))
colnames(final_df) <- c("Name", "Designation")

创建一个分组行的连续字体。然后split允许为每种字体创建一个列表,然后您可以使用paste.

输出:

                        Name             Designation
1               Chris J Kemp              Bad D King
2 President, CEO &  Director Best, Teacher &  Friend

推荐阅读