我有两个向量,arg2
和df
以及一个数据框arg1 <- c(1, 1, 2, 2)
arg2 <- c(1, 2, 1, 2)
df <- data.frame(a <- c(1, 1, 2, 2, 3, 3, 4, 4))
。
arg1
我想在我的数据框中包含arg2
和arg1
的信息但不合并。
此处的关键任务是将arg2
或arg1
的第一个值与a的值1相关联,第二个值arg2
或df <- data.frame(a = c(1, 1, 2, 2, 3, 3, 4, 4),
d = c(1, 1, 1, 1 ,2, 2, 2, 2),
e = c(1, 1, 2, 2, 1, 1, 2, 2))
的值为2等等。
最终输出:
df$d <- as.character(factor(a, labels = arg1))
如果我是arg1和arg2的unicity,我会这样做:
arg1
我认为这样做的经典方法是将arg2
和#include <iostream>
//#include <unistd.h>
using namespace std;
int main()
{
//sleep(3);
int number;
cout << "Doing The Fibonacci Sequence"; //sleep(5);
cout << ""<<endl;
cin>>number;
int a=1;
int b=1;
for (int num=1; num < number-1; num++)
{
int c=a+b;
cout << a << " + " << b << " = " << c <<endl;
a=b;
b=c;
}
return 0;
}
转换为数据框并与df合并。但这个解决方案看起来有点沉重。有没有办法只使用向量分配?
答案 0 :(得分:4)
您可以使用存储为整数的因子:
i <- as.integer(factor(df$a, levels = unique(df$a)))
cbind(df,
d = arg1[i],
e = arg2[i])
# a d e
#1 1 1 1
#2 1 1 1
#3 2 1 2
#4 2 1 2
#5 3 2 1
#6 3 2 1
#7 4 2 2
#8 4 2 2
我假设列a
中的值可能不同于1:4,在这种情况下,这会将a
中的第一个唯一值与arg1
中的第一个值相匹配,分别为arg2
。
正如@ A.Webb在评论中指出的那样,使用
会更容易i <- match(df$a,unique(df$a))
而不是转换为因子和整数。
答案 1 :(得分:2)
我们可以使用Map
do.call(rbind, Map(cbind, split(df$a, df$a),
d=arg1, e= arg2))
或使用dplyr
library(dplyr)
df %>%
mutate(d=arg1[a], e= arg2[a])
或data.table
library(data.table)
setDT(df)[, c('d', 'e') := list(a,arg1[.GRP], arg2[.GRP]) ,.(a)]