Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 创建新列以标识第一个值>;0跨不同的列_R - Fatal编程技术网

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