У меня есть список фреймов данных
q = list(x = data.frame(a = 1:3, b = 4:6),
y = data.frame(c = letters[1:3], d = letters[4:6]))
Мне нужно связать каждый столбец из фрейма данных x с каждым столбцом фрейма данных y
Таким образом, результатом будет именованный список, выглядящий примерно так:
ac
1 a
2 b
3 c
ad
1 d
2 e
3 f
bc
4 a
5 b
6 c
bd
4 d
5 e
6 f
Результат необходимо применить к списку, который имеет n фреймов данных, причем каждый фрейм данных имеет k столбцов.
Благодарность,
Сэм
1 ответ
Я использовал имена столбцов с заглавной буквы, чтобы избежать путаницы с их значениями, и добавил еще один data.frame с 3 столбцами, чтобы убедиться, что этот способ является достаточно общим.
q = list(x = data.frame(A = 1:3, B = 4:6),
y = data.frame(C = letters[1:3], D = letters[4:6]),
z = data.frame(E = 3:1, G = letters[3:1], H = letters[6:4]))
col_counts <- lengths(q)
col_indices <- lapply(col_counts, seq)
matchups <- do.call(expand.grid, col_indices)
get_nth_name <- function(x, n) {
names(x)[n]
}
index_over <- function(indexes, datalist = q) {
column_values <- mapply('[[', datalist, indexes, SIMPLIFY = FALSE)
names(column_values) <- mapply(get_nth_name, datalist, indexes)
as.data.frame(column_values)
}
result <- apply(matchups, 1L, index_over)
names(result) <- vapply(
result,
FUN.VALUE = character(1),
FUN = function(x) {
paste0(names(x), collapse = '')
}
)
Похожие вопросы
Новые вопросы
r
R - это бесплатный язык программирования с открытым исходным кодом и программная среда для статистических вычислений, биоинформатики, визуализации и общих вычислений. Пожалуйста, предоставьте минимальные и воспроизводимые примеры вместе с желаемым результатом. Используйте dput () для данных и укажите все небазовые пакеты с вызовами library (). Не вставляйте изображения для данных или кода, вместо этого используйте блоки кода с отступом. По вопросам, связанным со статистикой, используйте https://stats.stackexchange.com.
library(purrr)
;map(cross_n(q), data.frame)
может помочь вам. Я понятия не имею, насколько хорошо это масштабируется.