我有如下数据:
| genome |time_1|time_2|time_3|time_4|
|genome_1| 28 |28 |NA |NA |
|genome_2| 2 |4 |5 |2 |
|genome_3| 12 |12 |12 |12 |
|genome_4| 2 |NA |NA |NA |
|genome_5| 3 |3 |NA |NA |我希望在每一行中用1替换相同的值(即至少出现两次),用0替换一次的值。我想要的桌子应该是这样的:
| genome |time_1|time_2|time_3|time_4|
|genome_1| 1 |1 |NA |NA |
|genome_2| 1 |0 |0 |1 |
|genome_3| 1 |1 |1 |1 |
|genome_4| 0 |NA |NA |NA |
|genome_5| 1 |1 |NA |NA |有什么办法吗?非常感谢
发布于 2021-05-11 17:46:43
在R基地,您将做:
id <-t(apply(df[-1], 1, function(x)duplicated(x, NA)|duplicated(x, NA, TRUE)))
cbind(df[1], NA^is.na(df[-1]) * id)
genome time_1 time_2 time_3 time_4
1 genome_1 1 1 NA NA
2 genome_2 1 0 0 1
3 genome_3 1 1 1 1
4 genome_4 0 NA NA NA
5 genome_5 1 1 NA NA你也可以:
df %>%
pivot_longer(starts_with("time"))%>%
mutate(value = (duplicated(value, NA)|duplicated(value, NA, TRUE))* NA^is.na(value))%>%
pivot_wider()
# A tibble: 5 x 5
genome time_1 time_2 time_3 time_4
<chr> <int> <int> <int> <int>
1 genome_1 1 1 NA NA
2 genome_2 1 0 0 1
3 genome_3 1 1 1 1
4 genome_4 1 NA NA NA
5 genome_5 1 1 NA NA发布于 2021-05-11 17:41:09
从你似乎不关心联系的评论来看,下面是一种使用rowwise的潜在方法
library(dplyr)
data %>%
rowwise() %>%
mutate(across(time_1:time_4,
~ case_when(is.na(.) ~ NA_real_,
. == tail(as.numeric(names(sort(table(c_across(time_1:time_4))))),1) ~ 1,
TRUE ~ 0)
))
## A tibble: 5 x 5
## Rowwise:
# genome time_1 time_2 time_3 time_4
# <chr> <dbl> <dbl> <dbl> <dbl>
#1 genome_1 1 1 NA NA
#2 genome_2 1 0 0 1
#3 genome_3 1 1 1 1
#4 genome_4 1 NA NA NA
#5 genome_5 1 1 NA NA数据:
data <- structure(list(genome = c("genome_1", "genome_2", "genome_3",
"genome_4", "genome_5"), time_1 = c(28L, 2L, 12L, 2L, 3L), time_2 = c(28L,
4L, 12L, NA, 3L), time_3 = c(NA, 5L, 12L, NA, NA), time_4 = c(NA,
2L, 12L, NA, NA)), class = "data.frame", row.names = c(NA, -5L
))发布于 2021-05-11 17:38:22
这似乎适用于我:
a= cbind(c(28,2,12,2,3),c(28,4,12,NA,3))
a= cbind(a,c(NA,5,12,NA,NA))
a=cbind(a, c(NA,2,12,NA,NA))
a = as.data.frame(a)
e = function(i){
i = as.numeric(i)
b= table(i)
b= ifelse(b>1,1,0)
b = as.data.frame(b)
b = b[as.character(i),]
return(b)
}
t(apply(a, 1, e))https://stackoverflow.com/questions/67491450
复制相似问题