在 R 中使用聚合为另一个变量的相同值查找一个变量的唯一值
Using aggregate in R to find unique values of one variable for the same value of another variable
我想在此数据框中应用聚合函数:
A <- data.frame(c(1:2,1:2,2),c("a","c","b","c","d"))
colnames(A) <- c("ola","hi")
A
> A
ola hi
1 1 a
2 2 c
3 1 b
4 2 c
5 2 d
使用 A$ola 的有序值和相应的唯一值 A$hi 获取 A,如下所示:
A <- data.frame(c(1:2),c("a,b","c,d"))
colnames(A) <- c("ola","hi")
> A
ola hi
1 1 a,b
2 2 c,d
我试过这段代码:
aggregate(A, by=list(A$ola), FUN=unique)
但结果是这样的:
Group.1 ola hi.1 hi.2
1 1 1 a b
2 2 2 c d
有人可以解释一下我做错了什么吗?
如果您真的想要一个包含独特项目文本的列,您只需要稍微复杂一点的函数。
uniqCSV <- function(x) { paste(unique(x), sep = ',') }
aggregate(hi ~ ola, data = A, FUN= uniqCSV)
除了paste
方法,如果我们想要'hi'列作为list
,
r1 <- aggregate(hi~ola, unique(A), FUN=list)
r1
# ola hi
#1 1 a, b
#2 2 c, d
OP 的代码给出了 data.frame
r2 <- aggregate(hi~ola, A, FUN=unique)
r2
# ola hi.1 hi.2
#1 1 a b
#2 2 c d
有两列,其中第二列 'hi' 是 matrix
.
str(r2)
#'data.frame': 2 obs. of 2 variables:
#$ ola: int 1 2
#$ hi : chr [1:2, 1:2] "a" "c" "b" "d"
另一个选项:
library(dplyr)
distinct(A) %>% group_by(ola) %>% summarise(hi = toString(hi))
给出:
#Source: local data frame [2 x 2]
#
# ola hi
# (int) (chr)
#1 1 a, b
#2 2 c
数据
A <- structure(list(ola = c(1L, 2L, 1L, 2L), hi = structure(c(1L,
3L, 2L, 3L), .Label = c("a", "b", "c"), class = "factor")), .Names = c("ola",
"hi"), row.names = c(NA, -4L), class = "data.frame")
我想在此数据框中应用聚合函数:
A <- data.frame(c(1:2,1:2,2),c("a","c","b","c","d"))
colnames(A) <- c("ola","hi")
A
> A
ola hi
1 1 a
2 2 c
3 1 b
4 2 c
5 2 d
使用 A$ola 的有序值和相应的唯一值 A$hi 获取 A,如下所示:
A <- data.frame(c(1:2),c("a,b","c,d"))
colnames(A) <- c("ola","hi")
> A
ola hi
1 1 a,b
2 2 c,d
我试过这段代码:
aggregate(A, by=list(A$ola), FUN=unique)
但结果是这样的:
Group.1 ola hi.1 hi.2
1 1 1 a b
2 2 2 c d
有人可以解释一下我做错了什么吗?
如果您真的想要一个包含独特项目文本的列,您只需要稍微复杂一点的函数。
uniqCSV <- function(x) { paste(unique(x), sep = ',') }
aggregate(hi ~ ola, data = A, FUN= uniqCSV)
除了paste
方法,如果我们想要'hi'列作为list
,
r1 <- aggregate(hi~ola, unique(A), FUN=list)
r1
# ola hi
#1 1 a, b
#2 2 c, d
OP 的代码给出了 data.frame
r2 <- aggregate(hi~ola, A, FUN=unique)
r2
# ola hi.1 hi.2
#1 1 a b
#2 2 c d
有两列,其中第二列 'hi' 是 matrix
.
str(r2)
#'data.frame': 2 obs. of 2 variables:
#$ ola: int 1 2
#$ hi : chr [1:2, 1:2] "a" "c" "b" "d"
另一个选项:
library(dplyr)
distinct(A) %>% group_by(ola) %>% summarise(hi = toString(hi))
给出:
#Source: local data frame [2 x 2]
#
# ola hi
# (int) (chr)
#1 1 a, b
#2 2 c
数据
A <- structure(list(ola = c(1L, 2L, 1L, 2L), hi = structure(c(1L,
3L, 2L, 3L), .Label = c("a", "b", "c"), class = "factor")), .Names = c("ola",
"hi"), row.names = c(NA, -4L), class = "data.frame")