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
以下是数据的处理过程:
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
答案 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}}
...了解这些功能的作用。