我问了一个问题,得到了很好的答案,解决了我的问题。但是,我想修改代码(这是我以前的问题)。
我尝试再次解释该问题以及如何解决该问题
卡斯滕·W(Karsten W.)的回答给了我一个规范化的数据(为每个元素中的每个字符串分配其位置的数量),如下所示(我没有更改)
normalize <- function(x, delim) {
x <- gsub(")", "", x, fixed=TRUE)
x <- gsub("(", "", x, fixed=TRUE)
idx <- rep(seq_len(length(x)), times=nchar(gsub(sprintf("[^%s]",delim), "", as.character(x)))+1)
names <- unlist(strsplit(as.character(x), delim))
return(setNames(idx, names))
}
第二部分是将上述功能分别应用于每列,因此,如果我需要在1000列上执行此操作,这将非常耗时。相反,我在注释中执行以下操作,我尝试使用lappy
# s1 <- normalize(df1[,1], ";")
# s2 <- normalize(df1[,2], ";")
我喜欢这样
myS <- lapply(df1, normalize,";")
我将其他部分保持原样
lookup <- normalize(df2[,1], ",")
然后在两者之间进行检查,我修改了该函数以仅保留df2的行号(我从中删除了[s [found])
process <- function(s) {
lookup_try <- lookup[names(s)]
found <- which(!is.na(lookup_try))
pos <- lookup_try[names(s)[found]]
return(paste(pos, sep=""))
}
那我做什么我都无法得到输出
process(myS$sample1)
...
最后,我需要将数据保存在txt文件或我可以读取的内容中。我用过,write.table
但这行不通。有没有更好的方法可以做到这一点?如何自动执行?
这是一个错字。process(myS$sample_1)
而不是...(myS$sample1)
我得到:
> process(myS$sample_1)
[1] "4" "1" "4"
和
> lapply(myS, process)
$sample_1
[1] "4" "1" "4"
$sample_2
[1] "4" "15" "16"
恕我直言,函数process()
最好返回一个整数向量:
process <- function(s) {
lookup_try <- lookup[names(s)]
found <- which(!is.na(lookup_try))
pos <- lookup_try[names(s)[found]]
names(pos) <- NULL
pos
}
要将结果放入数据框:
r <- lapply(myS, process)
m <- max(sapply(r, length))
r.matrix <- matrix(NA, m, length(r))
for (j in 1:length(r)) {
x <- r[[j]]
length(x) <- m
r.matrix[,j] <- x
}
colnames(r.matrix) <- names(r)
r.df <- as.data.frame(r.matrix)
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句