如何将一列中的数据行复制和移动到另一列中

时间:2018-12-28 01:10:57

标签: r rows

R编程语言如何将一列中的数据行复制和移动到另一列中

以上是我的Google搜索关键字,下面是我一直在搜索,研究和尝试执行的链接,但没有好运。我最接近的是将一行数据从一列移到首选的“房间”列,但是,它删除了所有“房间”数据。

我还认为我应该为“ Unit_Code”编写一个函数以提取相应的“ room_XXX”数据,但是,我不知道是否需要这样做。我只需要将“ room_XXX”数据拉到R中“ NA”的“空”“房间”列单元格中即可。

1。)该链接看起来像我想的一样,但是,它试图遵循Frank(User:1191259)对“它如何工作”的解释,并迷路了。 Filling "implied missing values" in a data frame that has varying observations per time unit

2。)我尝试了此链接,但是,我只尝试了一个列,而无法将其他所有列都放到函数中:

ROOMS$room <- ROOMS$room[match(ROOMS$room_8_5s = 560:592, ROOMS$room_8_5s == 560:592)]

Fill in data frame with values from rows above

3。)我无法跟踪此链接以及如何编写函数: r - fill columns in data frame

期待有任何帮助,就像我在这里待了将近一个星期一样,这应该很容易,但是,我无法弄清楚。

----------
room  room_8_5s unit_code
                2
1701            1
               15
     560        8
566             8
562             8
561             8
560             8
2513           13
2512           13
2511           13

---------

所需表的结果/结果:将“ room_xxx”数据复制或移入“ room”列。最多还有10个“ room_xxx”列,这是一个缩写版本:

room    room_2_6ne  room_8_5s   room_13_5n  unit_code
2501                            2501        13
                                             7
                                             6
                                             4
                                             3
1601    1601                                 2
1701                                         1
                                            15
560                 560                      8
566                                          8
565                                          8
564                                          8

以下是数据的处理过程:

    1. 数据从调查站点中提取。
    1. 用户输入单位代码,即1,2,3,4 ...
    1. 出现相应房间号的选择,即单位代码= 2,room_2_6ne = 1601-1632。
    1. 用户选择房间1601。
    1. 在R中,我从站点中提取所有数据。
    1. 所需结果:复制和/或将房间号(即room_2_6ne)移至“房间”列。
    1. 然后,在R中,按单位代码分载.csv报告,仅包含“房间”列,而没有相应的房间列,即room_2_6ne,包括所有其他60个相关列(为简洁起见,此处未列出),供单位经理手动检查/验证。
    1. 在手动检查并纠正了错误之后,我在网站上下载了纠正的数据
    1. 保存数据,然后将其重新粘贴到另一个Excel 3rd Party工作表中。

TO:E. Brown-贡献者 这是我为使其正常工作所做的:

重新排列48列,然后在col后面添加一个名为“ rooms”的列。 #4,“房间”列旁边,现在= 49列:

all <- data.frame(all[, c(1, 8:20, 2:7, 21:29, 31, 33, 35:51)])
all <- add_column(all, rooms = '', .after = 4)

然后使用新的第5列-“房间”运行该函数,并指向所有数据以填充第6列-“房间”。

for (i in 5:length(all[,5])) {
all$room[i] <- all[i,6:15][!is.na(all[i,6:15])]

(我很想让列标题在下面排列,您如何在这里这样做?我要添加四个空格,并且数据列正确响应...)

rooms room room_1_7ne room_2_6ne room_3_5ne room_4_4n...
    2401                2401                    
    1501            1501                        
    1601        1601                            
    1701    1701                                
    567                                 
    568                                 
    569                                 

有关电子表格,请参见此处的图像链接: ROOM

如果我尝试将数据指向第5列“房间”,则它没有填充前4行数据(请参见列-“房间”下的567、568、569、571室)。我在顶部粘贴了“ room_XXX”数据,以表明它确实属于“ rooms”列。我在这里想念的是它不会将前四行数据填充到“房间”列中吗?

rooms   room    room_1_7ne  room_2_6ne  room_3_5ne  room_4_4n...
660 660                                 660
2501    2501                                2501    
560 560                         560     
1201    1201                        1201            
2301    2301                    2301                
2401    2401                2401                    
1501    1501            1501                        
1601    1601        1601                            
1701    1701    1701                                
    567                                 
    568                                 
    569                                 
    571                                 
572 572                                 

有关电子表格,请参见此处的图像链接:    ROOMS

2 个答案:

答案 0 :(得分:0)

如果我对您的理解正确,那么这个简单的循环将满足您的要求,我认为这是从许多列中查找单个非NA值,并使用所有非NA值创建一个新列。

样本数据:

col1 <- c(1, NA, NA, NA)
col2 <- c(NA, 2, NA, NA)
col3 <- c(NA, NA, 3, NA)
col4 <- c(NA, NA, NA, 4)
merged <- c(NA,NA,NA,NA)
all <- data.frame(merged, col1, col2, col3, col4)

示例解决方案:

for (i in 1:length(all[,1])) {
    all$merged[i] <- all[i,2:5][!is.na(all[i,2:5])]
}

答案 1 :(得分:0)

> df # A tibble: 12 x 5 room room_2_6ne room_8_5s room_13_5n unit_code <int> <int> <int> <int> <int> 1 NA NA NA 2501 13 2 NA NA NA NA 7 3 NA NA NA NA 6 4 NA NA NA NA 4 5 NA NA NA NA 3 6 NA 1601 NA NA 2 7 1701 NA NA NA 1 8 NA NA NA NA 15 9 NA NA 560 NA 8 10 566 NA NA NA 8 11 565 NA NA NA 8 12 564 NA NA NA 8

如果您的数据框是:

tidyr

...我们可以使用tidyverse中的df %>% gather(value_name, value, -room, -unit_code) %>% mutate(room = ifelse(is.na(room), value, room)) %>% spread(value_name, value) 来收集,变异和传播:

# A tibble: 15 x 5
    room unit_code room_13_5n room_2_6ne room_8_5s
   <int>     <int>      <int>      <int>     <int>
 1   560         8         NA         NA       560
 2   564         8         NA         NA        NA
 3   565         8         NA         NA        NA
 4   566         8         NA         NA        NA
 5  1601         2         NA       1601        NA
 6  1701         1         NA         NA        NA
 7  2501        13       2501         NA        NA
 8    NA         2         NA         NA        NA
 9    NA         3         NA         NA        NA
10    NA         4         NA         NA        NA
11    NA         6         NA         NA        NA
12    NA         7         NA         NA        NA
13    NA         8         NA         NA        NA
14    NA        13         NA         NA        NA
15    NA        15         NA         NA        NA

...导致:

df %>%
      gather(value_name, value, -room, -unit_code)

尝试:

df %>%
      gather(value_name, value, -room, -unit_code) %>%
      mutate(room = ifelse(is.na(room), value, room))

然后:

{{1}}

...了解这些功能的作用。