使用R将两个变量的值组合在一起创建一个新变量。

5
我需要通过合并两个现有变量的值来创建一个新变量。
anim <- c(1,2,3,4,5,6,7,8,9,10)
pgrp <- c(1,3,2,4,2,3,1,2,4,3)
fos <- c(2,1,1,2,1,2,1,2,2,1)
data <- data.frame(anim,pgrp,fos)
data
   anim pgrp fos
1     1    1   2
2     2    3   1
3     3    2   1
4     4    4   2
5     5    2   1
6     6    3   2
7     7    1   1
8     8    2   2
9     9    4   2
10   10    3   1

我需要我的新变量“pf”以以下方式获取“pgrp”和“fos”的值。
data
   anim pgrp fos pf
1     1    1   2 12
2     2    3   1 31
3     3    2   1 21
4     4    4   2 42
5     5    2   1 21
6     6    3   2 32
7     7    1   1 11
8     8    2   2 22
9     9    4   2 42
10   10    3   1 31
2个回答

10
如果您的数据框名称为x,只需将它们粘贴在一起(强制转换为字符),然后转换为数字。
x$pf <- as.numeric(paste(x$pgrp, x$fos, sep = ""))

不要将“data”用作名称,因为它已经是一个函数了。


6
啧啧,df 也是一个函数。;-) - Joshua Ulrich
@mdsummer;@ Joshua Ulrich,谢谢……我再也不会将“data”用作数据框名称了。 - baz
@mdsummer 我也试过类似的情况,使用两个数值变量但却只得到了一个新的带有NA值的变量。不知道这是为什么?其中一个变量有缺失值(NA),而另一个变量具有数值,反之亦然。 - Pulse
不好意思,你需要自己复制,顺便说一下这是弄清楚问题的最简单方法。可以将类似 paste(c(1, NA, 2), 6:7) 这样的内容进行比较。 - mdsumner
谢谢您的回复,我不明白您所说的“reproduce”是什么意思,我会提出一个新问题来讨论这个话题。 - Pulse

3
您可以使用算术运算(如果fos始终小于10):
df <- within(df, pf <- pgrp * 10 + fos)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接