将值从一个数据帧表示到另一个数据帧。申请?申请?
我有以下数据框
data<-data.frame(ID=c("a", "b", "c", "d"), zeros=c(3,2,5,4), ones=c(1,1,2,1))
ID zeros ones
1 a 3 1
2 b 2 1
3 c 5 2
4 d 4 1
,我希望创建另一个包含 2 列的数据框:
第一列(id) ID 重复(零+个)次 第二列值应该是 c(rep(0,zeros),rep(1,ones)),
这样结果就是
id value
1 a 0
2 a 0
3 a 0
4 a 1
5 b 0
6 b 0
7 b 1
8 c 0
9 c 0
10 c 0
11 c 0
12 c 0
13 c 1
14 c 1
15 d 0
16 d 0
17 d 0
18 d 0
19 d 1
我尝试的 data.frame(id=(rep(data$ID, (data$zeros) +data$ones))), value=c(rep(0, data$zeros), rep(1, data$ones)))
但不起作用。有什么想法吗?先感谢您
I have the following data frame
data<-data.frame(ID=c("a", "b", "c", "d"), zeros=c(3,2,5,4), ones=c(1,1,2,1))
ID zeros ones
1 a 3 1
2 b 2 1
3 c 5 2
4 d 4 1
and I wish to create another data frame with 2 columns:
First column(id) the ID is repeated (zero+ones) times
Second column value should be the c(rep(0, zeros), rep(1, ones))
so that the result would be
id value
1 a 0
2 a 0
3 a 0
4 a 1
5 b 0
6 b 0
7 b 1
8 c 0
9 c 0
10 c 0
11 c 0
12 c 0
13 c 1
14 c 1
15 d 0
16 d 0
17 d 0
18 d 0
19 d 1
I tried data.frame(id=(rep(data$ID, (data$zeros+data$ones))), value=c(rep(0, data$zeros), rep(1, data$ones)))
but doesnt work. Any ideas? Thank you in advance
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
使用
plyr
包中的ddply
可能有点矫枉过正,但这是我想到的第一件事:哦,我将数据框的名称更改为
dat
以避免坏习惯(data
是一个经常使用的函数的名称)。This is perhaps overkill, using
ddply
from theplyr
package, but it's the first thing that came to me:Oh and I changed the name of your data frame to
dat
to avoid a bad habit (data
is the name of an oft used function).这是一个基本的 R 解决方案。我自己更喜欢
plyr
的过度杀伤力:Here's a base R solution. I prefer the overkill of
plyr
myself:由于您已经获得了第一列的基本 R 解决方案,因此这是第二列的解决方案:
编辑:更改了上面的一个小问题并对其进行了测试。现在可以了。
Since you've already got a base R solution for the first column, this is one for your second column:
Edit: changed a minor thing above and tested it. It works now.
我也更喜欢
plyr
方法,但我想我应该抛出另一个与首先重塑数据然后复制数据相关的基本 R 解决方案。 (也使用dat
而不是data
):不像其他一些基本解决方案那么优雅,因为它需要中间存储,但可能很有趣。
I also prefer the
plyr
method, but I thought I'd throw another base R solution related to reshaping the data first, and then replicating it. (also usingdat
instead ofdata
):Not as elegant as some of the other base solutions because it requires intermediate storage, but possibly interesting.