Использовать значение столбца в качестве индекса другого столбца - PullRequest
0 голосов
/ 18 октября 2018

Я хочу заменить значение столбца во фрейме данных значением другого столбца.На последний столбец следует ссылаться, используя значение третьего столбца в качестве индекса.

  A B C
1 1 3 2
2 8 5 2

Например, значение столбца A следует заменить на столбец с индексом C той же строки (здеськолонка Б).Столбец B не может быть нацелен непосредственно, потому что позиция и имя различны в каждой строке.

  A B C
1 3 3 2
2 5 5 2

Я пытался использовать df[,df$C] <- df$A, но тогда весь столбец C используется в качестве вектора.Вместо этого следует использовать только значение вектора с индексом == номер строки, но я не могу найти решение.

Ответы [ 2 ]

0 голосов
/ 19 октября 2018

Другой способ - unlist ваш data.frame и взять подмножество данных из результирующего вектора, используя имена векторов:

dat[, "A"] <- unlist(dat)[paste0(colnames(dat)[dat$C], 1:nrow(dat))]

dat

#   A B C
# 1 3 3 2
# 2 5 5 2
0 голосов
/ 18 октября 2018

Мы можем использовать row/column индексацию.Создайте matrix индекса строки (seq_len(nrow(df))) с индексом столбца (из столбца «C»), используйте его для извлечения значений набора данных и присвойте ему «A»

m1 <- cbind(seq_len(nrow(df)), df$C)
df$A <- df[m1]
df
#  A B C
#1 3 3 2
#2 5 5 2

данные

df <-  structure(list(A = c(1L, 8L), B = c(3L, 5L), 
  C = c(2L, 2L)), class = "data.frame", row.names = c("1", "2"))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...