(Связанные question, что не включает в себя сортировку. Легко использовать только paste
, когда вам не нужно сортировать.)строчная сортировка затем сцепить по определенным столбцам кадра данных
У меня есть менее чем -идеально-структурированная таблица с символьными столбцами, которые являются общими «item1», «item2» и т. д. Я хотел бы создать новую символьную переменную, которая представляет собой разделенную запятыми конкатенацию этих столбцов. Так, например, в строке 5, если item1 = «молоко», item2 = «яйца», а item3 = «масло», новая переменная в строке 5 может быть «масло, яйца, молоко»
Я написал функция f()
ниже, которая работает с двумя переменными символов. Тем не менее, у меня возникли проблемы
- Использование
mapply
или другой «векторизации» (я знаю, что это на самом деле просто цикл) - Обобщая функцию произвольного числа столбцов
Любая помощь очень оценили.
df <- data.frame(a =c("foo","bar"),
b= c("baz","qux"))
paste(df$a,df$b, sep=", ")
# returns [1] "foo, baz" "bar, qux" ... but I want [1] "baz, foo" "bar, qux"
f <- function(a,b) paste(c(a,b)[order(c(a,b))],collapse=", ")
f("foo","baz")
# returns [1] "baz, foo" ... which is what I want ... how to vectorize?
df$new_var <- mapply(f, df$a, df$b)
df
# a b new_var <- new_var is not what I want
# 1 foo baz 1, 2
# 2 bar qux 1, 2
# Interestingly, data.table is smart enough to fix my bad mapply
library(data.table)
dt <- data.table(a =c("foo","bar"),
b= c("baz","qux"))
dt[,new_var:=mapply(f, a, b)]
dt
# a b new_var <- new var IS what I want
# 1: foo baz baz, foo
# 2: bar qux bar, qux