Попробуйте это (после создания резервной копии этих фреймов данных):
levels(sel_clst$GeneName) <- trimws( levels( sel_clst$GeneName ))
levels(immgen_log2$GeneName) <- trimws( levels( immgen_log2$GeneName ))
merge2 <- merge(sel_clst, immgen_log2)
Иногда функция read.csv
не выполняет обрезку во время ввода данных, поэтому выполнение trimws
для всех ваших операций read.csv может быть шагом в сохранении здравомыслия для будущих усилий. Для версии TL; DR вы должны установить strip.white=TRUE
в качестве параметра всякий раз, когда вы используете read.csv
. Я бы сказал, что вы должны перезаписать свою копию read.csv с помощью:
read.csv <-
function ( ...){ utils::read.csv(..., strip.white=TRUE) }
Существует options
-параметр, доступный с default.stringsAsFactors()
, который позволит вам избежать путаницы с новичками по поводу создания факторов, но нет настройки по умолчанию, которую можно настроить на strip.white
.
Прочитать эту запись:
> dat <- read.csv(text= "hd1 , hd2, hd3\n 1, a , c\n1,b,d\n")
> dat
hd1 hd2 hd3
1 1 a c
2 1 b d
> dput(dat)
structure(list(hd1 = c(1L, 1L), hd2 = structure(1:2, .Label = c(" a ",
"b"), class = "factor"), hd3 = structure(1:2, .Label = c(" c",
"d"), class = "factor")), .Names = c("hd1", "hd2", "hd3"), class = "data.frame", row.names = c(NA,
-2L))
> dat <- data.frame(
lapply(read.csv(text= "hd1 , hd2, hd3\n 1, a , c\n1,b,d\n"),
trimws)
)
# could also have used a two step process starting with the original `dat`
# dat[] <- lapply(dat, trimws) .... the `[]` preserves structure
> dat
hd1 hd2 hd3
1 1 a c
2 1 b d
> dput(dat)
structure(list(hd1 = structure(c(1L, 1L), .Label = "1", class = "factor"),
hd2 = structure(1:2, .Label = c("a", "b"), class = "factor"),
hd3 = structure(1:2, .Label = c("c", "d"), class = "factor")), .Names = c("hd1",
"hd2", "hd3"), row.names = c(NA, -2L), class = "data.frame")