R 按一列列出另一列的值
我想我有一个相对简单的问题,但不知道如何解决它。 我有以下数据框:R 按一列列出另一列的值,r,R,我想我有一个相对简单的问题,但不知道如何解决它。 我有以下数据框: a <- c("A","B","C","C","D","D","E") b <- c(1,2,3,4,5,6,7) c <- data.frame(a,b) 谁能给我指出正确的方向吗?我正在查看ddply,其中一列用于maxb,另一列用于minb,然后将这些列粘贴在一起,但它给了我一个错误: Error in .fun(piece, ...) : argument is missing, with no de
a <- c("A","B","C","C","D","D","E")
b <- c(1,2,3,4,5,6,7)
c <- data.frame(a,b)
谁能给我指出正确的方向吗?我正在查看ddply,其中一列用于maxb,另一列用于minb,然后将这些列粘贴在一起,但它给了我一个错误:
Error in .fun(piece, ...) : argument is missing, with no default
使用plyr:
现在,生成的data.frame有一个列bs,每个元素都是一个列表
FWIW,了解您为什么希望以这种方式构造数据可能会提供一些信息。通常,R的一些功能可以让您避免这种类型的操作,并使代码更加清晰易懂……使用tapply:
这可以简单地使用base R中的split来完成。使用数据帧df中的数据 现在这是一个列表,您需要一个数据帧,但如果不以某种方式连接信息,这是不可能的,因为数据帧中的每个元素必须具有相同的长度。如果要将其作为向量,只需将元素粘贴在一起:
sapply(with(df, split(b, a)), paste, collapse = ",")
R> sapply(with(df, split(b, a)), paste, collapse = ",")
A B C D E
"1" "2" "3,4" "5,6" "7"
是否希望在新data.frame的行中包括字母和唯一元素
v <- tapply(b,a, unique)
data.frame(new_df = unlist(lapply(seq_along(v),
function(i) paste(names(v)[[i]], paste(v[[i]], collapse = ","), sep = ";"))))
# new_df
#1 A;1
#2 B;2
#3 C;3,4
#4 D;5,6
#5 E;7
+1您可以将其简化为tapplyc$b,c$a,粘贴,collapse=','-这里不需要匿名函数,因为您可以通过。。。塔普利的论点。
tapply(c$b, c$a, function(x) paste(x, collapse =','))
# A B C D E
# "1" "2" "3,4" "5,6" "7"
df <- data.frame(a = c("A","B","C","C","D","D","E"), b = c(1,2,3,4,5,6,7))
R> with(df, split(b, a))
$A
[1] 1
$B
[1] 2
$C
[1] 3 4
$D
[1] 5 6
$E
[1] 7
sapply(with(df, split(b, a)), paste, collapse = ",")
R> sapply(with(df, split(b, a)), paste, collapse = ",")
A B C D E
"1" "2" "3,4" "5,6" "7"
v <- tapply(b,a, unique)
data.frame(new_df = unlist(lapply(seq_along(v),
function(i) paste(names(v)[[i]], paste(v[[i]], collapse = ","), sep = ";"))))
# new_df
#1 A;1
#2 B;2
#3 C;3,4
#4 D;5,6
#5 E;7