我想将这些行分组,在新列group ID
中为它们提供唯一的group
。如果RNAClass
和V1
类似且diff
小于10000,则应为行提供相同的ID。例如,具有rRNA和chr1的所有行和差异< 10000给出ID1。
我使用interaction
transform(input, group_ID = as.numeric(interaction(RNAClass, V1, drop=TRUE)))
输入:
RNAClass V1 diff
21 rRNA chr8 122
33 rRNA chr1 1140
45 rRNA chr1 1313
68 rRNA chr8 2222
72 tRNA chr9 9207
80 tRNA chr9 5111
72 tRNA chr9 492407
80 tRNA chr9 54111
输出:
RNAClass V1 diff group
21 rRNA chr8 122 ID1
33 rRNA chr1 1140 ID2
45 rRNA chr1 1313 ID2
68 rRNA chr8 2222 ID1
72 tRNA chr9 9207 ID3
80 tRNA chr9 5111 ID3
72 tRNA chr9 492407 ID4
80 tRNA chr9 5111 ID3
答案 0 :(得分:0)
base R
选项是基于'diff'列创建逻辑索引'i1',paste
''RNAClass'和'V1'('str1'),更改'str1'中的元素基于'i1',使其成为唯一的字符串。将“str1”转换为factor
,将levels
指定为unique
值为'str1',强制转换为integer
,将paste
转换为'ID'
i1 <- input$diff >= 10000
str1 <- with(input, paste(RNAClass, V1))
str1[i1] <- paste0(str1[i1], seq_len(sum(i1)))
input$group <- paste0("ID", as.integer(factor(str1, levels = unique(str1))))
input$group
#[1] "ID1" "ID2" "ID2" "ID1" "ID3" "ID3" "ID4" "ID3"
或使用dplyr
library(dplyr)
input %>%
mutate(group = paste0(RNAClass, V1, as.integer(diff> 10000)),
group = paste0("ID", as.integer(factor(group, levels = unique(group)))))
注意:'diff'中显示的最后一个元素被视为'5111'而不是'54111'