我在 R 中有这些数据:
column1 = c("A", "B", "C")
column2 = c("AA", "BB", "CC", "DD")
column3 = c("AAA")
na.pad <- function(x,len){
x[1:len]
}
makePaddedDataFrame <- function(l,...){
maxlen <- max(sapply(l,length))
data.frame(lapply(l,na.pad,len=maxlen),...)
}
d = makePaddedDataFrame(list(x=column1,y=column2,z=column3))
x y z
1 A AA AAA
2 B BB <NA>
3 C CC <NA>
4 <NA> DD <NA>
- 我想为该表中的每个元素提供“升序 ID”,这样 NA 就不会分配 ID - 例如:
在上面的例子中:
-
X 列的第一行指定为 id = 1,X 列的第二行指定为 id = 2,X 列的第三行指定为 id = 3,并且跳过 X 列的第四行,因为有是一个 NA
-
由于 Y 列中没有 NA,因此 Y 列的第一行被指定为 id = 4(从前一行中选取),Y 列的第二行被指定为 id = 5,Y 列的第三行是分配为 id = 6,并且 Column Y 的第四行分配为 id = 7
-
由于除第一行外,Z 列中的所有行均为 NA,因此仅将 Z 列的第一行指定为 id = 8,并跳过所有其他行。
这是一个选项replace
- 创建一个包含非 NA 元素的“d”逻辑矩阵(!is.na(d)
), replace
这些元素,具有序列 (sum(!is.na(d))
- 返回非 NA 的总数,seq_len
,给出该计数的序列)并分配(<-
) 将其添加到新列paste
ing 现有列名上的 '_id'
d[paste0(names(d), "_id")] <- replace(d, !is.na(d), seq_len(sum(!is.na(d))))
-output
> d
x y z x_id y_id z_id
1 A AA AAA 1 4 8
2 B BB <NA> 2 5 <NA>
3 C CC <NA> 3 6 <NA>
4 <NA> DD <NA> <NA> 7 <NA>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)