R help - изменить максимальное значение каждой строки в определенном состоянии - PullRequest
0 голосов
/ 22 сентября 2018

Я новичок в R. У меня есть датафрейм со столбцами 1: n. За исключением столбца 1 и n , я хочу изменить максимальное значение каждой строки, если строка имеет конкретное значение в другом столбце, И установить оставшиеся значения (исключая столбцы 1 и n) в ноль.У меня около 300 000 дел и 40 столбцов в моих реальных данных, однако приведенный ниже пример иллюстрирует то, чего я пытаюсь достичь:

A <- c(1,1,5,5,10)
B <- rnorm(1:5)
C <- rnorm(1:5)
D <- rnorm(1:5)
E <- c(10,15,100,100,100)
df <- data.frame(A,B,C,D,E)
df

   A           B          C          D   E
1  1  0.74286670  0.3222136  0.9381296  10
2  1 -0.03352498  0.5262685  0.1225731  15
3  5 -0.17689629 -0.8949740 -1.4376567 100
4  5  0.48329153  1.1574834 -1.1116581 100
5 10  0.13117277 -0.2068736  0.4841806 100

Здесь, если в столбце A каждой строки есть 1, я хочу изменитьмаксимальное значение каждой строки в значение столбца E, и установите столбцы B, C и D равными 0.

Итак, результат должен быть таким:

   A           B          C          D   E
1  1           0          0         10  10
2  1           0         15          0  15
3  5 -0.17689629 -0.8949740 -1.4376567 100
4  5  0.48329153  1.1574834 -1.1116581 100
5 10  0.13117277 -0.2068736  0.4841806 100

Я пыталсясделать это в течение двух дней.Спасибо.

1 Ответ

0 голосов
/ 23 сентября 2018

Попробуйте и посмотрите, что получится:)

df <- read.table(text = "A B C D E
1  1  0.74286670  0.3222136  0.9381296  10
2  1 -0.03352498  0.5262685  0.1225731  15
3  5 -0.17689629 -0.8949740 -1.4376567 100
4  5  0.48329153  1.1574834 -1.1116581 100
5 10  0.13117277 -0.2068736  0.4841806 100", stringsAsFactor = FALSE)

# find the max in columns B,C,D
z <- apply(df[df$A == 1, 2:4], 1, max)

# substitute the maximum value of each row for columns B,C,D where A == 1
# with the value of column E. Assign 0 to the others
y <- ifelse(df[df$A == 1, 2:4] == z, df$E[df$A == 1], 0)

# Change the values in your dataframe
df[df$A == 1, 2:4] <- y
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...