根据为该对应行填充的元素数量复制行

时间:2018-05-22 20:55:17

标签: r row

我有一个数据框,类似于下面的例子:

代码:

   DF <- data.frame(lapply(data.frame(Company = c("Company1", "Company2", "Company3", "Company4"),
                                  Col1 = c("test 1", "", "", ""),
                                   Col2 = c("", "test 2", "", "test 3"),
                                   Col3 = c("", "", "", "test 4")), as.character), stringsAsFactors=FALSE)

,数据框如下所示:

    Company      Col1   Col2   Col3 
1   Company1    test 1                  
2   Company2           test 2           
3   Company3           
4   Company4           test 3  test 4  

我想实现以下输出数据框:

    Company      Col   
1   Company1    test 1                  
2   Company2    test 2           
3   Company4    test 3
4   Company4    test 4

输出基本上是从列Col1,Col2和Col3为行中的特定参考列(公司)分配单个可用元素。如果该行具有两个或更多值(如第3行中的行),那么它应该创建重复的行,并且不按特定顺序为其分配单个元素。

只要每个公司都有账,就可以在产出(Col)中对公司3留空。

任何帮助都将非常受欢迎,因为我没有运气用关键字提出代码来执行上述操作。最接近的代码是stackoverflow question,但它没有解决复制引用列(在我的情况下是“公司”)的任务。

3 个答案:

答案 0 :(得分:1)

这是一种tidyverse方法。将数据从宽格式转换为长格式,并过滤“Col”列不是""的情况。

library(tidyverse)
DF %>% 
  gather('value', 'Col', -Company) %>% 
  filter(Col != "") %>% 
  select(-value)
#   Company    Col
#1 Company1 test 1
#2 Company2 test 2
#3 Company4 test 3
#4 Company4 test 4

答案 1 :(得分:0)

您可以尝试if (R.id.blue === ((ColorDrawable) view.getBackground()).getColor()) { // Your logic } 合并以&#34; col&#34;开头的所有列。然后使用tidyr:unite拆分成多行。

unnest

答案 2 :(得分:0)

一个base R,选项是unlist没有第一列的数据集,创建一个基于空白元素的逻辑索引来过滤空白,复制第一列(使长度相同) ,过滤掉空白元素并创建data.frame

v1 <- unlist(DF[-1], use.names = FALSE)
i1 <- nzchar(v1)
data.frame(Company = rep(DF$Company, 3)[i1], col = v1[i1])
#   Company    col
#1 Company1 test 1
#2 Company2 test 2
#3 Company4 test 3
#4 Company4 test 4