我有一个数据框,类似于下面的例子:
代码:
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,但它没有解决复制引用列(在我的情况下是“公司”)的任务。
答案 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