合并列并在数据框中删除无

时间:2015-07-15 14:16:37

标签: r concat

它似乎与这些two questions重复,但无法找到不涉及删除列,连接,然后将它们重新插入数据框的解决方案(这是一种漫长的方式,我只是设法生产)。

我想删除“dht_t”列并将其非NA或“无”行与“int_t”组合。这些dht列包含与int_t相同的数据,但位于不同的时间戳。我想组合行。

dht_t / h来自与int_t / h相同的传感器,但是为某些数据集添加了额外的行。

 head(july11)
                 time hive_id int_t int_h dht_t dht_h     hz     db     pa
1 2015-07-11 00:00:01   hive1  25.3  50.1  None  None 136.72 39.443 100849
2 2015-07-11 00:00:22   hive1  25.3  50.3  None  None    NaN 39.108 100846
3 2015-07-11 00:00:43   hive1  25.3  50.3  None  None    NaN 39.451 100835
4 2015-07-11 00:01:04   hive1  25.3  50.3  None  None    NaN 39.145 100849
5 2015-07-11 00:01:25   hive1  25.3  50.3  None  None    NaN 39.357 100844
6 2015-07-11 00:01:46   hive1  25.3  50.7  None  None    NaN 39.284 100843

这是数据的一部分,其中dht_t / h值应移至int_t / h列

this is asection of the data that where the dht_t/h values should be moved to int_t/h columns.

并且输出没有dht_t和dht_h

               time hive_id int_t int_h    hz     db     pa
1 2015-07-11 00:00:01   hive1  25.3  50.1  136.72 39.443 100849
2 2015-07-11 00:00:22   hive1  25.3  50.3  NaN    39.108 100846
3 2015-07-11 00:00:43   hive1  25.3  50.3  NaN    39.451 100835
4 2015-07-11 00:01:04   hive1  25.3  50.3  NaN    39.145 100849
5 2015-07-11 00:01:25   hive1  25.3  50.3  NaN    39.357 100844
6 2015-07-11 00:01:46   hive1  25.3  50.7  NaN    39.284 100843

1 个答案:

答案 0 :(得分:1)

我们可以使用ifelse将一列中的值替换为另一列。还有其他方法可以做到这一点。但是,这很容易理解。使用grep创建用于替换的列的索引(' indx')。

indx <- grep('^(int|dht)', names(july11))

由于列是因素&#39; (来自OP的评论),我们可以将循环中选定的列(lapply)转换为数字&#39;。非数字元素将被强制转换为NAs

july11[indx] <- lapply(july11[indx], function(x) as.numeric(as.character(x)))

我们替换&#39; int_t / int_h&#39;中的NA值使用&#39; dht_t / dht_h&#39;

中的值
july11$int_t <- with(july11, ifelse(is.na(int_t), dht_t, int_t))
july11$int_h <- with(july11, ifelse(is.na(int_h), dht_h, int_h))

并删除&#39; dht&#39;数据集中的列。

july11N <- july11[-grep('^dht', colnames(july11))]