(liên quan question mà không bao gồm sắp xếp. Thật dễ dàng để chỉ cần sử dụng paste
khi bạn không cần phải sắp xếp.)Row-khôn ngoan loại sau đó tiếp nhau trên các cột cụ thể của khung dữ liệu
Tôi có một ít hơn bảng có cấu trúc thực sự với các cột ký tự chung chung là "item1", "item2" v.v. Tôi muốn tạo một biến ký tự mới, là phần tử được phân tách bằng dấu phẩy, được phân tách bằng dấu phẩy của các cột này. Ví dụ: trong hàng 5, nếu item1 = "sữa", item2 = "trứng" và item3 = "bơ", biến mới trong hàng 5 có thể là "bơ, trứng, sữa"
Tôi đã viết hàm f()
bên dưới hoạt động trên hai biến ký tự. Tuy nhiên, tôi đang gặp khó khăn
- Sử dụng
mapply
hoặc "vector" khác (Tôi biết nó thực sự chỉ là một vòng lặp for) - Khái quát các chức năng để một số bất kỳ của cột
Bất kỳ sự giúp đỡ nhiều đánh giá cao.
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