我们有一个像这样的data.frame:
ID 10_1 2_20 [...]
1 1 1 [...]
2 2 1 [...]
我们需要根据列的名称更改数据框的值。例如,在第1行中,列10_1将获得值1,因为10大于" 10_1"中的值。但是第1行中的第2_20列将获得值0,因为2在" 2_20"中小于20。
如何迭代数据框并根据列的名称更改每行中列的值?
谢谢
答案 0 :(得分:1)
您可以尝试
indx <- (vapply(strsplit(names(df1)[-1], '_'), function(x) {
x1 <- as.numeric(x)
x1[1] >x1[2]}, logical(1L)))+0L
df1[-1] <- indx[col(df1[-1])]
df1
# ID 10_1 2_20
#1 1 1 0
#2 2 1 0
或者您可以尝试sub
v1 <- as.numeric(sub('_.*', '', names(df1)[-1]))
v2 <- as.numeric(sub('.*_', '', names(df1)[-1]))
indx <- (v1 >v2)+0L
df1[-1] <- indx[col(df1[-1])]
df1 <- structure(list(ID = 1:2, `10_1` = 1:2, `2_20` = c(1L, 1L)),
.Names = c("ID","10_1", "2_20"), class = "data.frame",
row.names = c(NA, -2L))