R 根据行索引在列中追加值
我希望在列中附加一个新值,以便其他列在数据框中重复与之对应的相同R 根据行索引在列中追加值,r,R,我希望在列中附加一个新值,以便其他列在数据框中重复与之对应的相同值(重复): test <- sqldf("select SUBJID, SITEID, ARMCD from dm where ARMCD !='' ") test SUBJID SITEID ARMCD 1 102-S0001 102 SER401_A 2 102-S0002 102 SER401_A 3 102-S0003 102 SER401_P 4 102-S0005 102 SE
值(重复)
:
test <- sqldf("select SUBJID, SITEID, ARMCD from dm where ARMCD !='' ")
test
SUBJID SITEID ARMCD
1 102-S0001 102 SER401_A
2 102-S0002 102 SER401_A
3 102-S0003 102 SER401_P
4 102-S0005 102 SER401_A
5 102-S0006 102 SER401_A
6 107-S0002 107 SER401_A
7 108-S0002 108 SER401_A
8 108-S0004 108 SER401_P
如果我能获得上述输出的r代码,我将不胜感激。我们可以创建一个带有“Total”的列,然后绑定行
library(dplyr)
df1 %>%
mutate(ARMCD = 'Total', rn = row_number()) %>%
bind_rows(df1 %>%
mutate(rn = row_number())) %>%
arrange(rn, ARMCD) %>%
select(-rn)
# SUBJID SITEID ARMCD
#1 102-S0001 102 SER401_A
#2 102-S0001 102 Total
#3 102-S0002 102 SER401_A
#4 102-S0002 102 Total
#5 102-S0003 102 SER401_P
#6 102-S0003 102 Total
#7 102-S0005 102 SER401_A
#8 102-S0005 102 Total
#9 102-S0006 102 SER401_A
#10 102-S0006 102 Total
#11 107-S0002 107 SER401_A
#12 107-S0002 107 Total
#13 108-S0002 108 SER401_A
#14 108-S0002 108 Total
#15 108-S0004 108 SER401_P
#16 108-S0004 108 Total
或者使用“ARMCD”中的值展开数据集
library(tidyr)
df1 %>%
uncount(2) %>%
mutate(ARMCD = replace(ARMCD, seq(1, n(), by = 2), 'Total'))
数据
df1我们可以创建一个带有“Total”的列,然后绑定行
library(dplyr)
df1 %>%
mutate(ARMCD = 'Total', rn = row_number()) %>%
bind_rows(df1 %>%
mutate(rn = row_number())) %>%
arrange(rn, ARMCD) %>%
select(-rn)
# SUBJID SITEID ARMCD
#1 102-S0001 102 SER401_A
#2 102-S0001 102 Total
#3 102-S0002 102 SER401_A
#4 102-S0002 102 Total
#5 102-S0003 102 SER401_P
#6 102-S0003 102 Total
#7 102-S0005 102 SER401_A
#8 102-S0005 102 Total
#9 102-S0006 102 SER401_A
#10 102-S0006 102 Total
#11 107-S0002 107 SER401_A
#12 107-S0002 107 Total
#13 108-S0002 108 SER401_A
#14 108-S0002 108 Total
#15 108-S0004 108 SER401_P
#16 108-S0004 108 Total
或者使用“ARMCD”中的值展开数据集
library(tidyr)
df1 %>%
uncount(2) %>%
mutate(ARMCD = replace(ARMCD, seq(1, n(), by = 2), 'Total'))
数据
df1
复制行并更改ARMCD
# duplicate each row
test[rep(1:.N, each = 2)
# replace every other row with 'Total'
][, ARMCD := replace(ARMCD, !!(.I - 1) %% 2, 'Total')][]
或rbind
并重新排序
rbind(test, copy(test)[, ARMCD := 'Total']
)[test[, c(rbind(1:.N, .N + 1:.N))]]
输出
# SUBJID SITEID ARMCD
# 1: 102-S0001 102 SER401_A
# 2: 102-S0001 102 Total
# 3: 102-S0002 102 SER401_A
# 4: 102-S0002 102 Total
# 5: 102-S0003 102 SER401_P
# 6: 102-S0003 102 Total
# 7: 102-S0005 102 SER401_A
# 8: 102-S0005 102 Total
# 9: 102-S0006 102 SER401_A
# 10: 102-S0006 102 Total
# 11: 107-S0002 107 SER401_A
# 12: 107-S0002 107 Total
# 13: 108-S0002 108 SER401_A
# 14: 108-S0002 108 Total
# 15: 108-S0004 108 SER401_P
# 16: 108-S0004 108 Total
复制行并更改ARMCD
# duplicate each row
test[rep(1:.N, each = 2)
# replace every other row with 'Total'
][, ARMCD := replace(ARMCD, !!(.I - 1) %% 2, 'Total')][]
或rbind
并重新排序
rbind(test, copy(test)[, ARMCD := 'Total']
)[test[, c(rbind(1:.N, .N + 1:.N))]]
输出
# SUBJID SITEID ARMCD
# 1: 102-S0001 102 SER401_A
# 2: 102-S0001 102 Total
# 3: 102-S0002 102 SER401_A
# 4: 102-S0002 102 Total
# 5: 102-S0003 102 SER401_P
# 6: 102-S0003 102 Total
# 7: 102-S0005 102 SER401_A
# 8: 102-S0005 102 Total
# 9: 102-S0006 102 SER401_A
# 10: 102-S0006 102 Total
# 11: 107-S0002 107 SER401_A
# 12: 107-S0002 107 Total
# 13: 108-S0002 108 SER401_A
# 14: 108-S0002 108 Total
# 15: 108-S0004 108 SER401_P
# 16: 108-S0004 108 Total
在base R中,我们可以创建一个新的数据集,将ARMCD
列和rbind
更改为原始数据帧。然后,我们可以基于subwid
和SITEID
order_df <- rbind(test, transform(test, ARMCD = "Total"))
order_df[with(order_df, order(SUBJID, SITEID)), ]
# SUBJID SITEID ARMCD
#1 102-S0001 102 SER401_A
#11 102-S0001 102 Total
#2 102-S0002 102 SER401_A
#21 102-S0002 102 Total
#3 102-S0003 102 SER401_P
#31 102-S0003 102 Total
#4 102-S0005 102 SER401_A
#41 102-S0005 102 Total
#5 102-S0006 102 SER401_A
#51 102-S0006 102 Total
#6 107-S0002 107 SER401_A
#61 107-S0002 107 Total
#7 108-S0002 108 SER401_A
#71 108-S0002 108 Total
#8 108-S0004 108 SER401_P
#81 108-S0004 108 Total
order_df在base R中,我们可以创建一个新的数据集,将ARMCD
列和rbind
更改为原始数据帧。然后,我们可以基于subwid
和SITEID
order_df <- rbind(test, transform(test, ARMCD = "Total"))
order_df[with(order_df, order(SUBJID, SITEID)), ]
# SUBJID SITEID ARMCD
#1 102-S0001 102 SER401_A
#11 102-S0001 102 Total
#2 102-S0002 102 SER401_A
#21 102-S0002 102 Total
#3 102-S0003 102 SER401_P
#31 102-S0003 102 Total
#4 102-S0005 102 SER401_A
#41 102-S0005 102 Total
#5 102-S0006 102 SER401_A
#51 102-S0006 102 Total
#6 107-S0002 107 SER401_A
#61 107-S0002 107 Total
#7 108-S0002 108 SER401_A
#71 108-S0002 108 Total
#8 108-S0004 108 SER401_P
#81 108-S0004 108 Total
order_df1)pivot_longer插入一列A2
其所有行均包含单词Total
,然后使用pivot_longer
将其从宽改为长。这还将创建一个名称列,我们不需要它,因此将其删除
library(dplyr)
library(tidyr)
test %>%
mutate(A2 = "Total") %>%
pivot_longer(starts_with("A"), values_to = "ARMCD") %>%
select(-name)
给予:
# A tibble: 16 x 3
SUBJID SITEID ARMCD
<chr> <int> <chr>
1 102-S0001 102 SER401_A
2 102-S0001 102 Total
3 102-S0002 102 SER401_A
4 102-S0002 102 Total
5 102-S0003 102 SER401_P
6 102-S0003 102 Total
7 102-S0005 102 SER401_A
8 102-S0005 102 Total
9 102-S0006 102 SER401_A
10 102-S0006 102 Total
11 107-S0002 107 SER401_A
12 107-S0002 107 Total
13 108-S0002 108 SER401_A
14 108-S0002 108 Total
15 108-S0004 108 SER401_P
16 108-S0004 108 Total
# A tibble: 16 x 3
SUBJID SITEID ARMCD
<chr> <int> <chr>
1 102-S0001 102 SER401_A
2 102-S0001 102 Total
3 102-S0002 102 SER401_A
4 102-S0002 102 Total
5 102-S0003 102 SER401_P
6 102-S0003 102 Total
7 102-S0005 102 SER401_A
8 102-S0005 102 Total
9 102-S0006 102 SER401_A
10 102-S0006 102 Total
11 107-S0002 107 SER401_A
12 107-S0002 107 Total
13 108-S0002 108 SER401_A
14 108-S0002 108 Total
15 108-S0004 108 SER401_P
16 108-S0004 108 Total
SUBJID SITEID ARMCD
1 102-S0001 102 SER401_A
1.1 102-S0001 102 Total
2 102-S0002 102 SER401_A
2.1 102-S0002 102 Total
3 102-S0003 102 SER401_P
3.1 102-S0003 102 Total
4 102-S0005 102 SER401_A
4.1 102-S0005 102 Total
5 102-S0006 102 SER401_A
5.1 102-S0006 102 Total
6 107-S0002 107 SER401_A
6.1 107-S0002 107 Total
7 108-S0002 108 SER401_A
7.1 108-S0002 108 Total
8 108-S0004 108 SER401_P
8.1 108-S0004 108 Total
给予:
# A tibble: 16 x 3
SUBJID SITEID ARMCD
<chr> <int> <chr>
1 102-S0001 102 SER401_A
2 102-S0001 102 Total
3 102-S0002 102 SER401_A
4 102-S0002 102 Total
5 102-S0003 102 SER401_P
6 102-S0003 102 Total
7 102-S0005 102 SER401_A
8 102-S0005 102 Total
9 102-S0006 102 SER401_A
10 102-S0006 102 Total
11 107-S0002 107 SER401_A
12 107-S0002 107 Total
13 108-S0002 108 SER401_A
14 108-S0002 108 Total
15 108-S0004 108 SER401_P
16 108-S0004 108 Total
# A tibble: 16 x 3
SUBJID SITEID ARMCD
<chr> <int> <chr>
1 102-S0001 102 SER401_A
2 102-S0001 102 Total
3 102-S0002 102 SER401_A
4 102-S0002 102 Total
5 102-S0003 102 SER401_P
6 102-S0003 102 Total
7 102-S0005 102 SER401_A
8 102-S0005 102 Total
9 102-S0006 102 SER401_A
10 102-S0006 102 Total
11 107-S0002 107 SER401_A
12 107-S0002 107 Total
13 108-S0002 108 SER401_A
14 108-S0002 108 Total
15 108-S0004 108 SER401_P
16 108-S0004 108 Total
SUBJID SITEID ARMCD
1 102-S0001 102 SER401_A
1.1 102-S0001 102 Total
2 102-S0002 102 SER401_A
2.1 102-S0002 102 Total
3 102-S0003 102 SER401_P
3.1 102-S0003 102 Total
4 102-S0005 102 SER401_A
4.1 102-S0005 102 Total
5 102-S0006 102 SER401_A
5.1 102-S0006 102 Total
6 107-S0002 107 SER401_A
6.1 107-S0002 107 Total
7 108-S0002 108 SER401_A
7.1 108-S0002 108 Total
8 108-S0004 108 SER401_P
8.1 108-S0004 108 Total
给予:
# A tibble: 16 x 3
SUBJID SITEID ARMCD
<chr> <int> <chr>
1 102-S0001 102 SER401_A
2 102-S0001 102 Total
3 102-S0002 102 SER401_A
4 102-S0002 102 Total
5 102-S0003 102 SER401_P
6 102-S0003 102 Total
7 102-S0005 102 SER401_A
8 102-S0005 102 Total
9 102-S0006 102 SER401_A
10 102-S0006 102 Total
11 107-S0002 107 SER401_A
12 107-S0002 107 Total
13 108-S0002 108 SER401_A
14 108-S0002 108 Total
15 108-S0004 108 SER401_P
16 108-S0004 108 Total
# A tibble: 16 x 3
SUBJID SITEID ARMCD
<chr> <int> <chr>
1 102-S0001 102 SER401_A
2 102-S0001 102 Total
3 102-S0002 102 SER401_A
4 102-S0002 102 Total
5 102-S0003 102 SER401_P
6 102-S0003 102 Total
7 102-S0005 102 SER401_A
8 102-S0005 102 Total
9 102-S0006 102 SER401_A
10 102-S0006 102 Total
11 107-S0002 107 SER401_A
12 107-S0002 107 Total
13 108-S0002 108 SER401_A
14 108-S0002 108 Total
15 108-S0004 108 SER401_P
16 108-S0004 108 Total
SUBJID SITEID ARMCD
1 102-S0001 102 SER401_A
1.1 102-S0001 102 Total
2 102-S0002 102 SER401_A
2.1 102-S0002 102 Total
3 102-S0003 102 SER401_P
3.1 102-S0003 102 Total
4 102-S0005 102 SER401_A
4.1 102-S0005 102 Total
5 102-S0006 102 SER401_A
5.1 102-S0006 102 Total
6 107-S0002 107 SER401_A
6.1 107-S0002 107 Total
7 108-S0002 108 SER401_A
7.1 108-S0002 108 Total
8 108-S0004 108 SER401_P
8.1 108-S0004 108 Total
注
可复制形式的输入假定为:
Lines <- "
SUBJID SITEID ARMCD
1 102-S0001 102 SER401_A
2 102-S0002 102 SER401_A
3 102-S0003 102 SER401_P
4 102-S0005 102 SER401_A
5 102-S0006 102 SER401_A
6 107-S0002 107 SER401_A
7 108-S0002 108 SER401_A
8 108-S0004 108 SER401_P"
test <- read.table(text = Lines, as.is = TRUE)
行1)pivot\u longer插入一列A2
其所有行均包含单词Total
,然后使用pivot\u longer
将其从宽改长。这还将创建一个名称列,我们不需要它,因此将其删除
library(dplyr)
library(tidyr)
test %>%
mutate(A2 = "Total") %>%
pivot_longer(starts_with("A"), values_to = "ARMCD") %>%
select(-name)
给予:
# A tibble: 16 x 3
SUBJID SITEID ARMCD
<chr> <int> <chr>
1 102-S0001 102 SER401_A
2 102-S0001 102 Total
3 102-S0002 102 SER401_A
4 102-S0002 102 Total
5 102-S0003 102 SER401_P
6 102-S0003 102 Total
7 102-S0005 102 SER401_A
8 102-S0005 102 Total
9 102-S0006 102 SER401_A
10 102-S0006 102 Total
11 107-S0002 107 SER401_A
12 107-S0002 107 Total
13 108-S0002 108 SER401_A
14 108-S0002 108 Total
15 108-S0004 108 SER401_P
16 108-S0004 108 Total
# A tibble: 16 x 3
SUBJID SITEID ARMCD
<chr> <int> <chr>
1 102-S0001 102 SER401_A
2 102-S0001 102 Total
3 102-S0002 102 SER401_A
4 102-S0002 102 Total
5 102-S0003 102 SER401_P
6 102-S0003 102 Total
7 102-S0005 102 SER401_A
8 102-S0005 102 Total
9 102-S0006 102 SER401_A
10 102-S0006 102 Total
11 107-S0002 107 SER401_A
12 107-S0002 107 Total
13 108-S0002 108 SER401_A
14 108-S0002 108 Total
15 108-S0004 108 SER401_P
16 108-S0004 108 Total
SUBJID SITEID ARMCD
1 102-S0001 102 SER401_A
1.1 102-S0001 102 Total
2 102-S0002 102 SER401_A
2.1 102-S0002 102 Total
3 102-S0003 102 SER401_P
3.1 102-S0003 102 Total
4 102-S0005 102 SER401_A
4.1 102-S0005 102 Total
5 102-S0006 102 SER401_A
5.1 102-S0006 102 Total
6 107-S0002 107 SER401_A
6.1 107-S0002 107 Total
7 108-S0002 108 SER401_A
7.1 108-S0002 108 Total
8 108-S0004 108 SER401_P
8.1 108-S0004 108 Total
给予:
# A tibble: 16 x 3
SUBJID SITEID ARMCD
<chr> <int> <chr>
1 102-S0001 102 SER401_A
2 102-S0001 102 Total
3 102-S0002 102 SER401_A
4 102-S0002 102 Total
5 102-S0003 102 SER401_P
6 102-S0003 102 Total
7 102-S0005 102 SER401_A
8 102-S0005 102 Total
9 102-S0006 102 SER401_A
10 102-S0006 102 Total
11 107-S0002 107 SER401_A
12 107-S0002 107 Total
13 108-S0002 108 SER401_A
14 108-S0002 108 Total
15 108-S0004 108 SER401_P
16 108-S0004 108 Total
# A tibble: 16 x 3
SUBJID SITEID ARMCD
<chr> <int> <chr>
1 102-S0001 102 SER401_A
2 102-S0001 102 Total
3 102-S0002 102 SER401_A
4 102-S0002 102 Total
5 102-S0003 102 SER401_P
6 102-S0003 102 Total
7 102-S0005 102 SER401_A
8 102-S0005 102 Total
9 102-S0006 102 SER401_A
10 102-S0006 102 Total
11 107-S0002 107 SER401_A
12 107-S0002 107 Total
13 108-S0002 108 SER401_A
14 108-S0002 108 Total
15 108-S0004 108 SER401_P
16 108-S0004 108 Total
SUBJID SITEID ARMCD
1 102-S0001 102 SER401_A
1.1 102-S0001 102 Total
2 102-S0002 102 SER401_A
2.1 102-S0002 102 Total
3 102-S0003 102 SER401_P
3.1 102-S0003 102 Total
4 102-S0005 102 SER401_A
4.1 102-S0005 102 Total
5 102-S0006 102 SER401_A
5.1 102-S0006 102 Total
6 107-S0002 107 SER401_A
6.1 107-S0002 107 Total
7 108-S0002 108 SER401_A
7.1 108-S0002 108 Total
8 108-S0004 108 SER401_P
8.1 108-S0004 108 Total
给予:
# A tibble: 16 x 3
SUBJID SITEID ARMCD
<chr> <int> <chr>
1 102-S0001 102 SER401_A
2 102-S0001 102 Total
3 102-S0002 102 SER401_A
4 102-S0002 102 Total
5 102-S0003 102 SER401_P
6 102-S0003 102 Total
7 102-S0005 102 SER401_A
8 102-S0005 102 Total
9 102-S0006 102 SER401_A
10 102-S0006 102 Total
11 107-S0002 107 SER401_A
12 107-S0002 107 Total
13 108-S0002 108 SER401_A
14 108-S0002 108 Total
15 108-S0004 108 SER401_P
16 108-S0004 108 Total
# A tibble: 16 x 3
SUBJID SITEID ARMCD
<chr> <int> <chr>
1 102-S0001 102 SER401_A
2 102-S0001 102 Total
3 102-S0002 102 SER401_A
4 102-S0002 102 Total
5 102-S0003 102 SER401_P
6 102-S0003 102 Total
7 102-S0005 102 SER401_A
8 102-S0005 102 Total
9 102-S0006 102 SER401_A
10 102-S0006 102 Total
11 107-S0002 107 SER401_A
12 107-S0002 107 Total
13 108-S0002 108 SER401_A
14 108-S0002 108 Total
15 108-S0004 108 SER401_P
16 108-S0004 108 Total
SUBJID SITEID ARMCD
1 102-S0001 102 SER401_A
1.1 102-S0001 102 Total
2 102-S0002 102 SER401_A
2.1 102-S0002 102 Total
3 102-S0003 102 SER401_P
3.1 102-S0003 102 Total
4 102-S0005 102 SER401_A
4.1 102-S0005 102 Total
5 102-S0006 102 SER401_A
5.1 102-S0006 102 Total
6 107-S0002 107 SER401_A
6.1 107-S0002 107 Total
7 108-S0002 108 SER401_A
7.1 108-S0002 108 Total
8 108-S0004 108 SER401_P
8.1 108-S0004 108 Total
注
可复制形式的输入假定为:
Lines <- "
SUBJID SITEID ARMCD
1 102-S0001 102 SER401_A
2 102-S0002 102 SER401_A
3 102-S0003 102 SER401_P
4 102-S0005 102 SER401_A
5 102-S0006 102 SER401_A
6 107-S0002 107 SER401_A
7 108-S0002 108 SER401_A
8 108-S0004 108 SER401_P"
test <- read.table(text = Lines, as.is = TRUE)
行