我有以下数据集
ID Jan Feb March April May Jun
ABC 0 1 0 0 2 1
DEF 1 2 1 0 0 0
GHI 0 10 0 1 0 0
JKI 0 0 2 0 0 0
MNO 3 0 0 0 0 0
我想得到这样的东西
ID Jan Feb March April May Jun LastMonth
ABC 0 1 0 0 1 1 Jun
DEF 1 1 1 0 0 0 March
GHI 0 1 0 1 0 0 April
JKI 0 0 1 0 0 0 March
MNO 1 0 0 0 0 0 Jan
我编写了以下代码来获取每一行的最后一个非零元素的索引,但这本身存在太多问题。
df$last <- apply(df, 1, function(x) tail(x[x > 0.00001],1))
我将新列作为
character(0)
character(0)
character(0)
2
character(0)
我不确定为什么要获得此列而不是实际数字
答案 0 :(得分:4)
您可以一行执行以下操作:
# get name of most recent month
df$Last_Month <- apply(df[-1], 1, function(x) last(colnames(df[-1])[x==1]))
答案 1 :(得分:4)
我们可以使用max.col
来获取每一行的逻辑矩阵最大值(df1[-1] != 0
)的列索引,并使用它来获取列名
df1$LastMonth <- names(df1)[-1][max.col(df1[-1] != 0, 'last')]
df1$LastMonth
#[1] "Jun" "March" "April" "March" "Jan"
df1 <- structure(list(ID = c("ABC", "DEF", "GHI", "JKI", "MNO"), Jan = c(0L,
1L, 0L, 0L, 3L), Feb = c(1L, 2L, 10L, 0L, 0L), March = c(0L,
1L, 0L, 2L, 0L), April = c(0L, 0L, 1L, 0L, 0L), May = c(2L, 0L,
0L, 0L, 0L), Jun = c(1L, 0L, 0L, 0L, 0L)), .Names = c("ID", "Jan",
"Feb", "March", "April", "May", "Jun"), class = "data.frame",
row.names = c(NA, -5L))