Во фрейме данных создайте столбцы с именами из вектора в R - PullRequest
0 голосов
/ 02 ноября 2018

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

# my data frame
df <- data.frame(id = c(1, 2, 3), var1 = c("a", "c", "e"), var2 = c("b", "d", "f"))

# the two vectors
v1 <- c("x", "y", "z")
v2 <- c(10, 20, 30)

Я бы тогда хотел сделать что-то вроде этого:

for (i in 1:length(v1)) {
  for (j in 1:length(v2)) {
    dataset$v1[i]_v2[j] <- "some value"
  }
  rm(j)
}
rm(i)

Конечно, хитрая часть, в которой этот подход не сработает, это dataset$v1[i]_v2[j]. Но есть ли какой-нибудь способ обойти это? Буду благодарен за любую помощь!

1 Ответ

0 голосов
/ 02 ноября 2018

Вы можете сделать это так:

for (i in 1:length(v1)) {
  for (j in 1:length(v2)) {
    # use [[]] to access the column
    df[[paste(v1[i], v2[j], sep='_')]] <- "some value"
    # this would also work:
    # df[, paste(v1[i], v2[j], sep='_')] <- "some value"
  }
  rm(j)
}
rm(i)

Если вы буквально хотите заполнить все столбцы "some_value", это еще проще:

column.names <- as.vector(sapply(v1, function(x) paste(x, v2, sep='_')))
df[,column.names] <- 'some_value'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...