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)