R 创建新列以标识第一个值>;0跨不同的列
我有以下数据框R 创建新列以标识第一个值>;0跨不同的列,r,R,我有以下数据框 df <- data.frame(col1 = c(0,0,1,1),col2 = c(1,0,0,3),col2 = c(1,0,0,3)) df希望这有帮助 df$col4 <- apply(df, 1, function(x) x[which(x>0)[1]]) df[is.na(df$col4),'col4'] <- 0 df$col4 0[1]] df[is.na(df$col4),'col4']这里是使用mapply的另一个想法 unlis
df <- data.frame(col1 = c(0,0,1,1),col2 = c(1,0,0,3),col2 = c(1,0,0,3))
df希望这有帮助
df$col4 <- apply(df, 1, function(x) x[which(x>0)[1]])
df[is.na(df$col4),'col4'] <- 0
df$col4 0[1]]
df[is.na(df$col4),'col4']这里是使用mapply
的另一个想法
unlist(mapply(`[`, split(df, 1:nrow(df)), max.col(df>0, ties.method = 'first')))
#1.col2 2.col1 3.col1 4.col1
# 1 0 1 1
根据“倒数”的需要,您可以将ties.method
更改为“last”,即
unlist(mapply(`[`, split(df, 1:nrow(df)), max.col(df>0, ties.method = 'last')))
#1.col2.1 2.col2.1 3.col1 4.col2.1
# 1 0 1 3
或者将数据帧反转,并将ties.method
保留为“first”,即
unlist(mapply(`[`, split(rev(df), 1:nrow(df)), max.col(df>0, ties.method = 'first')))
# 1.col2 2.col2.1 3.col2.1 4.col2.1
# 1 0 0 3
我们可以使用max.col()
df[cbind(1:nrow(df), max.col(df > 0, "first"))]
# [1] 1 0 1 1
谢谢。我很高兴它有帮助!请问有没有办法倒计时,这样我就可以把第4列设为1,0,2,3?试试df$col4 0),1)]
干杯,真的很有帮助!!非常可爱。这就是我的目标。全矢量化
unlist(mapply(`[`, split(rev(df), 1:nrow(df)), max.col(df>0, ties.method = 'first')))
# 1.col2 2.col2.1 3.col2.1 4.col2.1
# 1 0 0 3
df[cbind(1:nrow(df), max.col(df > 0, "first"))]
# [1] 1 0 1 1