说我有一个data.frame对象:
df <- data.frame(name=c('black','black','black','red','red'),
type=c('chair','chair','sofa','sofa','plate'),
num=c(4,5,12,4,3))
Run Code Online (Sandbox Code Playgroud)
现在我想计算每个组合的观察次数name和type.这可以这样做:
table(df[ , c("name","type")])
Run Code Online (Sandbox Code Playgroud)
或者也可能plyr,(虽然我不确定如何).
但是,如何将结果合并到原始数据框中?这样结果将如下所示:
df
# name type num count
# 1 black chair 4 2
# 2 black chair 5 2
# 3 black sofa 12 1
# 4 red sofa 4 1
# 5 red plate 3 1
Run Code Online (Sandbox Code Playgroud)
这里count现在存储从聚集的结果.
一个解决方案plyr也可能很有趣,但我希望看到这是如何用基础R完成的.
我有一个数据框df,我试图将所有具有列值的行子集B在数据集中多次出现.
我尝试使用表来执行此操作,但是在从表中进行子集化时遇到了问题:
t<-table(df$B)
Run Code Online (Sandbox Code Playgroud)
然后我尝试使用以下方法对其进
subset(df, table(df$B)>1)
Run Code Online (Sandbox Code Playgroud)
我得到了错误
"x [subset&!is.na(subset)]中的错误:'closure'类型的对象不是子集"
如何使用表计数对数据框进行子集化?
我在R中使用dplyr包,并将我的数据分组为3个变量(Year,Site,Brood).
我想摆脱少于3行的组.例如,在以下示例中,我想删除brood'2'的行.我有很多数据可以做到这一点,所以虽然我可以手工做到这一点,但使用R自动化它会很有帮助.
Year Site Brood Parents
1996 A 1 1
1996 A 1 1
1996 A 1 0
1996 A 1 0
1996 A 2 1
1996 A 2 0
1996 A 3 1
1996 A 3 1
1996 A 3 1
1996 A 3 0
1996 A 3 1
Run Code Online (Sandbox Code Playgroud)
我希望这是有道理的,并且非常感谢您的帮助!我是R和stackoverflow的新手,如果我说这个问题的方式不是很好,那么道歉!如果我需要提供任何其他信息,请与我们联系.
为了澄清这个问题,我将简要描述数据。
中的每一行data.frame都是一个观察值,各列代表与该观察值相关的变量,包括:观察到的个体,观察的时间,观察的位置等。我想排除/过滤少于5个个体观察。
换句话说,如果少于5行,其中personal = x,那么我想删除包含个别x的所有行,并将结果重新分配给new data.frame。我知道有些类似的蛮力技术names == unique(df$individualname),然后分别将这些名称细分,然后应用nrow以确定是否排除它们……但是必须有一种更好的方法。感谢您的帮助,对于R我还是很陌生。
我想生成一个df,它选择与"ID"相关联的行,而"ID"又与一个名为cutoff的变量相关联.对于此示例,我将cutoff设置为9,这意味着我想在df1中选择其ID值与超过9行相关联的行.我的代码的最后一行生成了一个我不明白的df.正确的df将有24行,ID列中都有3行或4行.有人可以解释我的最后一行代码实际上在做什么并建议采用不同的方法吗?
set.seed(123)
ID<-rep(c(1,2,3,4,5),times=c(5,7,9,11,13))
sub1<-rnorm(45)
sub2<-rnorm(45)
df1<-data.frame(ID,sub1,sub2)
IDfreq<-count(df1,"ID")
cutoff<-9
df2<-subset(df1,subset=(IDfreq$freq>cutoff))
Run Code Online (Sandbox Code Playgroud) 我有一个数据集,如下所示:
A B C
liver 5 RX
blood 9 DK
liver 7 DK
intestine 5 RX
blood 3 DX
blood 1 DX
skin 2 RX
skin 2 DX
Run Code Online (Sandbox Code Playgroud)
我只想保留基于的重复项(而不是三重复项)A。这意味着如果in A中的值重复,则应打印整行。
理想的输出如下所示:
A B C
liver 5 RX
liver 7 DK
skin 2 RX
skin 2 DX
Run Code Online (Sandbox Code Playgroud)
我尝试将以下代码与dplyr一起使用
df %>% group_by(A) %>% filter(n() >= 1)
Run Code Online (Sandbox Code Playgroud)
有人可以帮我吗?
我有一个大数据框,如果基于此数据框中的列的给定组的行数小于给定数字,我想删除所有行。下面是一个例子:
x=1:6; y=c("A","B","B","B","C","C")
df<- data.frame(x,y)
Run Code Online (Sandbox Code Playgroud)
如果我按变量 y 分组,我有三行属于“B”组。在这里,我想删除所有不满足此条件的行(<3 行)。预期输出:
df
x y
1 2 B
2 3 B
3 4 B
Run Code Online (Sandbox Code Playgroud)
是否有捷径可寻?
我试图通过因子变量对data.frame进行分组,然后返回data.frame的行,这些行与每个组中仅发生一次的观察值相对应。例如,考虑以下数据:
x = matrix(c(1,1,2,2,2,3,4,4,5,4), nrow = 5, ncol = 2, byrow = F)
x = data.frame(x)
x
# X1 X2
# 1 1 3
# 2 1 4
# 3 2 4
# 4 2 5
# 5 2 4
Run Code Online (Sandbox Code Playgroud)
我想按第1列中的值对数据进行分组,然后返回一组中第2列中的值仅出现一次的行。在这里,该函数将返回第一,第二和第四行。
所需的输出
# X1 X2
# 1 1 3
# 2 1 4
# 4 2 5
Run Code Online (Sandbox Code Playgroud)
我希望将其应用于具有> 1mm行的数据集。
df:-
Date Name Salary
Q1 2015 ABC $10
Q2 2015 ABC $11
Q3 2015 ABC $15
Q1 2015 XYZ $25
Q2 2015 XYZ $20
Run Code Online (Sandbox Code Playgroud)
我想从总频率小于 3 的数据中删除行。例如,XYZ 的频率为 2,所以我想删除第 4 行和第 5 行。
test <- setDT(df)[,.I[.N>2],by=Name]
Run Code Online (Sandbox Code Playgroud)
输出:-
> test
Name V1
1: ABC 1
2: ABC 2
3: ABC 3
Run Code Online (Sandbox Code Playgroud)
过滤正确完成,但我没有得到整个数据集,我只得到输出中的 Name 列。
有很多问题涉及重复观察的主题,但到目前为止,没有一个对我有用。
在这个问题中,我学习了如何从向量中选择所有重复项。
# vector
id <- c("a","b","b","c","c","c","d","d","d","d")
#To return ALL duplicated values by specifying fromLast argument:
id[duplicated(id) | duplicated(id, fromLast=TRUE)]
## [1] "b" "b" "c" "c" "c" "d" "d" "d" "d"
#Yet another way to return ALL duplicated values, using %in% operator:
id[id %in% unique(id[duplicated(id)])]
## [1] "b" "b" "c" "c" "c" "d" "d" "d" "d"
Run Code Online (Sandbox Code Playgroud)
现在有一个像这样的数据框:
dat <- data.frame(x = c(1, 1, 2, 2, 3),
y = c(5, 5, 6, 7, 8),
z = c('a', 'b', 'c', …Run Code Online (Sandbox Code Playgroud)