R中的数据帧修改

时间:2017-12-08 14:36:37

标签: r dplyr unique

下面三行R代码表示矢量a1,b1和“c1”,它是字段a1的唯一。我想显示两列的数据框,其中我应该让c1的每个元素显示的次数等于“a1”中的元素长度,在一列中,以及该字母的相应ID“b1”在另一列中柱。简单地说,一个带有“y”列的数据框,其中“c1”中的字母“a”将表示背靠背6次(字符串a1的长度),然后是“b”6次,然后是c,依此类推。也对应于其他列中的“1”6次,然后“2”6次,依此类推。请帮助和谢谢。

a1 = c("a","b","c","d","a","b")
b1 = c(1,2,3,4,1,2)
c1 = unique(a1)

新变化

a1 = c("a","b","b","d","c","e","f","a","b","c","d")
b1 = c(1,1,1,2,3,2,3,1,1,3,2)
c1 = unique(a1)

2 个答案:

答案 0 :(得分:0)

a1b1必须合并为一个数据。在应用unique()函数之前,在 框中。否则,向量的长度将不同。

DF <- data.frame(a1, b1)
unique(DF)[rep(1:nrow(unique(DF)), each = nrow(DF)), ]

对于第一个数据集

a1 = c("a","b","c","d","a","b")
b1 = c(1,2,3,4,1,2)

结果是:

    a1 b1
1    a  1
1.1  a  1
1.2  a  1
1.3  a  1
1.4  a  1
1.5  a  1
2    b  2
2.1  b  2
2.2  b  2
2.3  b  2
2.4  b  2
2.5  b  2
3    c  3
3.1  c  3
3.2  c  3
3.3  c  3
3.4  c  3
3.5  c  3
4    d  4
4.1  d  4
4.2  d  4
4.3  d  4
4.4  d  4
4.5  d  4

由24行组成(a1中的4个唯一值乘以6,即a1的长度)

请注意,这与user124123's answer不同,后者有36行(是length(b1)造成的length(a1)的{​​{1}}倍。

对于第二个数据集

rep(b1, each = length(a1))

结果由66行组成(6个唯一值乘以11)。 (为简便起见,省略了输出。)

答案 1 :(得分:-1)

这实现了你的要求我相信:

cbind(rep(c1, each = length(a1)),rep(b1, each = length(a1)))