0

我是 R 新手。我有 3 个数据帧 WT1、WT2、WT3,有 5000 行和 3 列 c1、c2、c3。

我已经编写了代码并创建了一个名为“Result”的数据框,它具有相同的 5000 行和两列(M1,M2),其中包含通过使用 for 循环比较所有五个数据框的每个对应行而获得的最大值和最小值。

尽管对于 WT1、WT2、WT3 的每一行,我在“结果”的 M1、M2 中都有最大值和最小值,但我不知道该最大值出现在哪个数据帧中,以及最小值出现在哪个数据帧中。所以我应该找到 M1(max) 值出现在哪个数据帧中,并且应该在“结果”的单独列 M3 中显示相应数据帧的 c1 元素。类似地,代码应该从哪个数据帧中找到 M2(min) 值出现,并在“结果”中名为 M4 的单独列中显示相应数据帧的 c1 元素。代码应该对“结果”中的所有 5000 行执行此操作,以显示 M3 和 M4。

注意:c1 元素将采用字母数字格式(04WEA804500),所以我想我也应该在将其显示为 M3 和 M4 之前将其转换为数字......抱歉,由于它很大,所以没有在此处粘贴数据帧......请帮帮我..

提前致谢..

4

1 回答 1

0

必须有一种更优雅的方式,但我坚持这一点;希望能帮助到你:

#some random data at first
set.seed(1)
WT1 <- data.frame(c1 = replicate(3, paste(sample(LETTERS, 4), 
      sample(0:9, 4), sep = "", collapse = "")), c2 = runif(3), stringsAsFactors = F)
set.seed(2)
WT2 <- data.frame(c1 = replicate(3, paste(sample(LETTERS, 4), 
      sample(0:9, 4), sep = "", collapse = "")), c2 = runif(3), stringsAsFactors = F)
set.seed(3)
WT3 <- data.frame(c1 = replicate(3, paste(sample(LETTERS, 4), 
      sample(0:9, 4), sep = "", collapse = "")), c2 = runif(3), stringsAsFactors = F)
#> WT1                    #> WT2                   #> WT3
#        c1         c2    #        c1        c2    #        c1        c2
#1 G2J8N7U4 0.26722067    #1 E9R8N1D5 0.3472722    #1 E6U5J0H2 0.2368850
#2 Q6B3E9X8 0.38611409    #2 M7N1Y3F5 0.4887732    #2 P5Z9M6L8 0.7911474
#3 S9Y1J5R0 0.01339033    #3 Z6F3K9B1 0.1492469    #3 C2R0V1G8 0.5997316

#separate columns `c1` from `c2` from all dataframes, in a manipulative form
c1s <- mapply(function(...) c(...), WT1$c1, WT2$c1, WT3$c1, SIMPLIFY = F)
names(c1s) <- NULL           
c2s <- mapply(function(...) c(...), WT1$c2, WT2$c2, WT3$c2, SIMPLIFY = F)

#a function to calculate everything wanted...
fun <- function(c1, c2)
{
 M1 <- max(c2)
 M2 <- min(c2)
 M3 <- c1[which.max(c2)]
 M4 <- c1[which.min(c2)]

 data.frame(M1, M2, M3, M4, stringsAsFactors = F)
}

#...for each row
Results <- t(mapply(fun, c1s, c2s))
#> Results
#     M1        M2         M3         M4        
#[1,] 0.3472722 0.236885   "E9R8N1D5" "E6U5J0H2"
#[2,] 0.7911474 0.3861141  "P5Z9M6L8" "Q6B3E9X8"
#[3,] 0.5997316 0.01339033 "C2R0V1G8" "S9Y1J5R0"
于 2013-11-12T10:47:09.163 回答