如果下一行中另一列的值为空,则连接行

切坦·阿文德·帕蒂尔

我有一个数据集,如下Input表所示。我想结合的行(4,5,6),列(8,9)和行(11,12)Input表,使得它们共享相同的ID,如图中排4,8 and 11Output桌子下面。

我试过了merge(),但是没有按预期工作。此处的关键是ID具有唯一值列。

关于如何有效实现这一目标的任何建议?

输入值

Row Name Val1 Val2 Unit ID
1        -0.5 5.5   V   UI-001
2    a   -0.5 2.5   V   UI-002
3    b   -0.5 5.5   V   UI-003
4    c   -0.5 5.5   V   UI-004
5    d              
6    e              
7        -45 125  Ohms  UI-005
8    f     2        kV  UI-006
9    g              
10   h   500        V   UI-007
11   i    15        kV  UI-008
12   j              
13   k                  UI-009

输入的dput()

structure(list(Name = c(NA, "a", "b", "c", "d", "e", NA, "f", 
"g", "h", "i", "j", "k"), Val1 = c(-0.5, -0.5, -0.5, -0.5, NA, 
NA, -45, 2, NA, 500, 15, NA, NA), Val2 = c(5.5, 2.5, 5.5, 5.5, 
NA, NA, 125, NA, NA, NA, NA, NA, NA), Unit = c("V", "V", "V", 
"V", NA, NA, "Ohms", "kV", NA, "V", "kV", NA, NA), ID = c("UI-001", 
"UI-002", "UI-003", "UI-004", NA, NA, "UI-005", "UI-006", NA, 
"UI-007", "UI-008", NA, "UI-009")), row.names = c(NA, -13L), class = 
c("tbl_df", "tbl", "data.frame"))

输出量

Row Name Val1 Val2 Unit ID
1        -0.5 5.5   V   UI-001
2    a   -0.5 2.5   V   UI-002
3    b   -0.5 5.5   V   UI-003
4    cde -0.5 5.5   V   UI-004      
5        -45  125 Ohms  UI-005
6    fg    2        kV  UI-006  
7    h   500        V   UI-007
8    ij   15        kV  UI-008
9    k                  UI-009

输出的dput()

structure(list(Name = c(NA, "a", "b", "cde", NA, "fg", "h", "ij", 
"k"), Val1 = c(-0.5, -0.5, -0.5, -0.5, -45, 2, 500, 15, NA), 
Val2 = c(5.5, 2.5, 5.5, 5.5, 125, NA, NA, NA, NA), Unit = c("V", 
"V", "V", "V", "Ohms", "kV", "V", "kV", NA), ID = c("UI-001", 
"UI-002", "UI-003", "UI-004", "UI-005", "UI-006", "UI-007", 
"UI-008", "UI-009")), row.names = c(NA, -9L), class = c("tbl_df", 
"tbl", "data.frame"))
朱利叶斯·维诺拉(Julius Vainora)

我们可能会使用

out <- df[!is.na(df$ID), ]
out$Name[!is.na(out$Name)] <- tapply(df$Name, cumsum(!is.na(df$ID)), paste, collapse = "")[!is.na(out$Name)]
out
#    Name  Val1  Val2 Unit     ID
# 1  <NA>  -0.5   5.5    V UI-001
# 2     a  -0.5   2.5    V UI-002
# 3     b  -0.5   5.5    V UI-003
# 4   cde  -0.5   5.5    V UI-004
# 7  <NA> -45.0 125.0 Ohms UI-005
# 8    fg   2.0    NA   kV UI-006
# 10    h 500.0    NA    V UI-007
# 11   ij  15.0    NA   kV UI-008
# 13    k    NA    NA <NA> UI-009

第一行摆脱在所有行的IDNA然后

tapply(df$Name, cumsum(!is.na(df$ID)), paste, collapse = "")
#     1     2     3     4     5     6     7     8     9 
#  "NA"   "a"   "b" "cde"  "NA"  "fg"   "h"  "ij"   "k" 

为构造正确的值,Name!is.na(out$Name)为我们提供out应该修改的(由于"NA"与的不同,因此需要修改NA)。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

将值复制到同一行中的下一列(如果为空)。如果不为空,则复制到同一行的第二列(如果为空)。重复

如果同一行的另一列中没有null,则将列值与上一行连接

如果同一行的另一列等于某值,如何计算一列中的值?

在同一行的另一列中为您命名的值查找相应的值

查找匹配的最后一行并检查下一列行是否为空

如果一列值相等而另一列不相等,则忽略 SQL 中的一行

根据另一列中的另一行更改一行的值

基于重复ID的子集,如果value是下一行的另一列中的value的重复项

获取上一行中列的值,并添加到下一行中的下一列

SQLITE - 如果一列为空,则另一列中的值为 0

如何检查一列的值是否在另一行的另一列中

用熊猫将csv文件同一行中的下一列的值填充到一行中的空值

如果某列不包含同一行中另一列的值,则将新列pandas中另一列的值添加

用另一行中的下一列减去列

如果列值在SQL中为null,如何用另一行更新一行

SSIS异步转换保留上一列的值并设置为下一行

如果另一列具有相同的值,则将列中每一行的数据插入表中

SQL:如果满足条件,则将值从列复制到同一列中的另一行

如果另一列符合条件,则在列值重复时删除一行

如果下一行的两个单元格在CSV文件中为空,如何重复列值

如果下一行单元格为空,如何重复列值

如果同一行中另一列中的值匹配,如何比较一列的两个值

TSQL:如何将值从上一行的一列复制到另一列的下一行

如果一行共享一列中另一行的值并且在 R 中的另一列中具有一个值,如何删除该行?

如果第一列的值為空,如何刪除一行?

在下一行空白区域下方的第一行中重复第一列的值

如果 logic = true,则使用前一行的值,否则使用另一列

如果满足条件,则用另一列中的值替换一列中的行

如何添加脚本,如果第一列为空,那么下一行还是什么都不做?