我有这样的数据集:
Users Age
1 2
2 7
3 10
4 3
5 8
6 20
Run Code Online (Sandbox Code Playgroud)
如何将此数据集拆分为3个数据集,其中第一个数据集由年龄介于0-5之间,第二个为6-10,第三个为11-15的所有用户组成?
您可以在一行代码中结合split
使用cut
,无需为不同的数据范围使用一堆不同的表达式进行子集化:
split(dat, cut(dat$Age, c(0, 5, 10, 15), include.lowest=TRUE))
# $`[0,5]`
# Users Age
# 1 1 2
# 4 4 3
#
# $`(5,10]`
# Users Age
# 2 2 7
# 3 3 10
# 5 5 8
#
# $`(10,15]`
# [1] Users Age
# <0 rows> (or 0-length row.names)
Run Code Online (Sandbox Code Playgroud)
cut
根据指定的断点split
分割数据,并根据提供的类别拆分数据帧.如果您存储在该计算到一个名为列表的结果l
,你可以用访问更小的数据帧l[[1]]
,l[[2]]
以及l[[3]]
或更复杂的:
l$`[0,5]`
l$`(5,10]`
l$`(10, 15]`
Run Code Online (Sandbox Code Playgroud)
首先,这是用于我的目的的数据集:foo=data.frame(Users=1:6,Age=c(2,7,10,3,8,20))
这是您的第一个数据集,年龄为 0\xe2\x80\x935:subset(foo,Age<=5&Age>=0)
Users Age\n1 1 2\n4 4 3\n
Run Code Online (Sandbox Code Playgroud)\n\n这是您的第二个,年龄为 6\xe2\x80\x9310:subset(foo,Age<=10&Age>=6)
Users Age\n2 2 7\n3 3 10\n5 5 8\n
Run Code Online (Sandbox Code Playgroud)\n\n你的第三个(使用subset(foo,Age<=15&Age>=11)
)是空的 \xe2\x80\x93 你最后的Age
观察结果超过 15。
另请注意,5 至 6 岁或 10 至 11 岁之间的分数年龄(例如 5.1、10.5)将被排除,因为此代码与您的问题非常匹配。如果您希望年龄小于 6 岁的人进入第一组,只需将该代码修改为subset(foo,Age<6&Age>=0)
。如果您更喜欢第二组中的假设人员Age=5.1
,则该组的代码将为subset(foo,Age<=10&Age>5)
。
归档时间: |
|
查看次数: |
8687 次 |
最近记录: |