【问题标题】:Data Frame Modification in RR中的数据框修改
【发布时间】:2018-05-22 19:47:31
【问题描述】:

下面的三行 R 代码显示了一个向量 a1,b1 和“c1”,它是字段 a1 的唯一性。我想显示一个包含两列的数据框,其中我应该让 c1 的每个元素显示的次数等于“a1”中元素长度的次数,在一列中,以及该字母的相应 ID “b1”在另一列中柱子。简单地说,一个数据框的列“y”,其中来自“c1”的字母“a”将被表示为 6 次(字符串 a1 的长度),然后是“b”6 次,然后是 c,依此类推。也对应其他列的a,“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)

【问题讨论】:

  • 我已经完成了一个部分,rep(c1, each = length(a1)),给了我适当的列,请帮助我为字符串中的每个字母分配正确的索引。跨度>
  • 这是你的意思吗? cbind(rep(c1, each = length(a1)),rep(b1, each = length(a1)))

标签: r dplyr unique


【解决方案1】:

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 的长度)

请注意,这与有 36 行的 user124123's answer 不同(length(b1) 乘以 length(a1),由 rep(b1, each = length(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)

结果包含 66 行(6 个唯一值乘以 11)。 (为简洁起见,省略了输出)。

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

    • 非常感谢@user124123,但很抱歉,我在第二部分添加了一个新的调整,你能帮我解决一个问题,多个字母具有相同的索引,然后我想分配它们, 谢谢。如果你能帮助我,我一定会接受你的回复。
    • 这里有什么线索吗?
    • 请检查您的答案。 rep(c1, each = length(a1))rep(b1, each = length(a1)) 的长度分别为 24 和 36(对于第一个数据集)并发出警告。
    猜你喜欢
    • 1970-01-01
    • 2011-05-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-22
    相关资源
    最近更新 更多