Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/74.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 按一列列出另一列的值_R - Fatal编程技术网

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