Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 如何根据另一列中某行的唯一值提取一列中的所有行并将其写入文件?_R_Bash - Fatal编程技术网

R 如何根据另一列中某行的唯一值提取一列中的所有行并将其写入文件?

R 如何根据另一列中某行的唯一值提取一列中的所有行并将其写入文件?,r,bash,R,Bash,我的数据如下所示: V1 V2 V3 V4 V5 V6 V7 1: chr11 9554978 9554979 rs114731977 0 + ENSG00000133789 2: chr11 9554978 9554979 rs374765884 0 + ENSG00000133789 3: chr11 9554977 9554979 rs796467675 0 + ENSG00000133789 4: c

我的数据如下所示:

      V1      V2      V3          V4 V5 V6              V7
1: chr11 9554978 9554979 rs114731977  0  + ENSG00000133789
2: chr11 9554978 9554979 rs374765884  0  + ENSG00000133789
3: chr11 9554977 9554979 rs796467675  0  + ENSG00000133789
4: chr11 9554976 9554979 rs796841057  0  + ENSG00000133789
5: chrX 15148554 15148555 rs2317411  0  - ENSG00000130150
6: chrX 15148775 15148776 rs2317410  0  - ENSG00000130150
...
我想要得到的是(对于这个示例来说)两个文件,每个文件包含一组从$V4到$V7中唯一值的rs值

像这样:

      V1      V2      V3          V4 V5 V6              V7
1: chr11 9554978 9554979 rs114731977  0  + ENSG00000133789
2: chr11 9554978 9554979 rs374765884  0  + ENSG00000133789
3: chr11 9554977 9554979 rs796467675  0  + ENSG00000133789
4: chr11 9554976 9554979 rs796841057  0  + ENSG00000133789
5: chrX 15148554 15148555 rs2317411  0  - ENSG00000130150
6: chrX 15148775 15148776 rs2317410  0  - ENSG00000130150
...
ENSG0000133789.txt:

rs114731977
rs374765884
rs796467675
rs796841057
ENSG0000130150.txt:

rs2317411
rs2317410
我试图获得这些价值观的一些东西:

data%>%group_by(V7) %>% summarise() 
distinct_df = data %>% distinct(V7) %>% select(V7)
他们只给了我7美元

我也试过:

awk -F' ' 'FNR==NR{a[$7]++;next} a[$7]==1'  SG_ALL SG_ALL >ss
SG_ALL是数据所在的位置,输入文件,我读了2次,第一次它将获取行的计数并将它们存储在数组中,第二次执行条件,如果计数为1,则只打印行

但在输出中,我只得到一行:

chr13 41545705 41545706 rs12429969 0 + ENSG00000150907

这解决了我的问题:


awk-F''{F=$7.txt';print$4>>F;close(F)}'OFS=''SG\u ALL

这里有一个使用
tidyverse
的选项:

library(tidyverse)

# Generate a data frame containing V4 and V7
df <- data.frame(
  V4 = paste0(
    'rs',
    str_pad(
      sample(1:10e6, 3),
      width = 6,
      side = 'left',
      pad = '0'
    )
  ),
  V7 = rep(
    paste0(
      'ENSG',
      str_pad(
        sample(1:5000, 4),
        width = 10,
        side = 'left',
        pad = '0'
      )
    ),
    12
  )
)

# Generate unique V7
unique_V7 <- df %>% select(
  V7
) %>% unique() %>% pull()

# Write V4 for each (unique) V7
for (cur_V7 in unique_V7) {
  df %>% filter(
    V7 == cur_V7
  ) %>% select(
    V4
  ) %>% write_csv(
    path = paste0(
      cur_V7, '.txt' # filename
    ),
    col_names = FALSE
  )
}
库(tidyverse)
#生成包含V4和V7的数据帧
df%unique()%%>%pull()
#为每个(唯一的)V7写入V4
用于(当前版本7在唯一版本7中){
df%>%过滤器(
V7==电流V7
)%%>%选择(
V4
)%%>%write\u csv(
路径=0(
cur_V7,'.txt'#文件名
),
col_names=FALSE
)
}