R: В кадре данных, заполненном различными длинами значений NA, добавьте столбец 2 каждой строки в последний столбец строки, который не является NA - PullRequest
0 голосов
/ 21 октября 2019

У меня есть датафрейм, заполненный числами и немного NA. Что я хочу сделать, так это добавить столбец 2 каждой строки кадра данных в последний столбец не-NA этой строки, а затем удалить столбец 2. Поэтому я думаю, что хитрость заключается в том, чтобы определить и выбрать последний столбец без NAкаждый ряд, когда каждый ряд имеет разное количество NA.

Образцы данных:

s1 <- c(1,2,1,2,4,NA,NA,NA)
s2 <- c(2,3,4,NA,NA,NA,NA,NA)
s3 <-c(3,2,1,4,5,1,NA,NA)
df3 <- rbind(s1,s2,s3)
print(s1)
colnames(df3) <- c("ID","Cash", "V0","V1","V2","V3","V4","V5")
print(df3)

> print(df3)
   ID Cash V0 V1 V2 V3 V4 V5
s1  1    2  1  2  4 NA NA NA
s2  2    3  4 NA NA NA NA NA
s3  3    2  1  4  5  1 NA NA

Итак, предполагаемая операция с вышеприведенным образцом набора данных - добавить столбец «Наличные» в последний столбец без NA каждой строки,а именно столбец V2, он же "4" для строки 1;столбец V0, он же «4» для строки 2;столбец "V3", он же "1" для строки 3.

После операции желаемый вывод должен быть:

s4 <- c(1,1,2,6,NA,NA,NA)
s5 <- c(2,7,NA,NA,NA,NA,NA)
s6 <-c(3,1,4,5,3,NA,NA)
df4 <- rbind(s4,s5,s6)
colnames(df4) <- c("ID","V0","V1","V2","V3","V4","V5")
print(df4)
> print(df4)
   ID V0 V1 V2 V3 V4 V5
s4  1  1  2  6 NA NA NA
s5  2  7 NA NA NA NA NA
s6  3  1  4  5  3 NA NA

1 Ответ

0 голосов
/ 21 октября 2019

Вот векторизованная опция с max.col, где мы извлекаем элемент в каждой строке, который является последним не-NA, добавляем значения столбца 'Cash' и обновляем этот столбец

ij <- cbind(seq_len(nrow(df3)), max.col(!is.na(df3[, -(1:2)]), "last"))
df3[,-(1:2)][ij] <- df3[,-(1:2)][ij] + df3[, "Cash"]
df3[, -2]
#   ID V0 V1 V2 V3 V4 V5
#s1  1  1  2  6 NA NA NA
#s2  2  7 NA NA NA NA NA
#s3  3  1  4  5  3 NA NA
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...