Найти индекс столбца, используя значение в столбце данных - PullRequest
1 голос
/ 08 марта 2020

У меня есть этот фрейм данных:

a <- c(1,2,3,4,5)
b <- c(110, 90, 200, 330, 250)
c <- c(120, 350, NA, 400, 240)
d <- c(180, 200, 120, 240, 340)
e <- c("2019_12", "2020_01", "2020_01", "2020_02", "2019_12")
df <- data.frame(a,b,c,d,e)
names(df) <- c('id', "2019_12", "2020_01", "2020_02", "X")

Я хочу найти индекс столбца, используя столбец X. Например, если столбец X имеет значение «2020_01», то индекс столбца будет равен 3.

Результат, который я хочу, должен быть таким:

  id 2019_12 2020_01 2020_02       X  col_index
1  1     100     120     180 2019_12          2
2  2     300     350     200 2020_01          3
3  3      NA      NA     120 2020_01          3
4  4     430     400     240 2020_02          4
5  5     270     240     340 2019_12          2

Я пробовал -l oop с этой функцией: df["col_index"][i] = grep(df[["X"]][i], colnames(df))

Однако, когда номер строки больше 100k, скорость этой функции не эффективна. Есть ли способ лучше решить эту проблему?

1 Ответ

2 голосов
/ 08 марта 2020

Мы можем использовать match, чтобы получить индекс столбца, сопоставив имена столбцов от 2 до 4 и столбец «X». Добавьте 1, чтобы внести исправления, потому что мы сопоставляем со 2-го по 4-й столбец

df$col_index <- match(df$X, names(df)[2:4]) + 1
df
#  id 2019_12 2020_01 2020_02       X col_index
#1  1     110     120     180 2019_12         2
#2  2      90     350     200 2020_01         3
#3  3     200      NA     120 2020_01         3
#4  4     330     400     240 2020_02         4
#5  5     250     240     340 2019_12         2

Это также будет работать с полными именами столбцов

match(df$X, names(df))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...