Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/79.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 如何获取特定列的中间值_R - Fatal编程技术网

R 如何获取特定列的中间值

R 如何获取特定列的中间值,r,R,我有这样的数据 df<-structure(list(T = c(36034L, 63763L, 51432L, 65100L, 61444L, 71012L, 266610L, 389787L, 47659L, 63156L, 84593L, 84331L), T.1 = c(45632L, 66505L, 60360L, 36685L, 107551L, 53360L, 323952L, 344944L, 69601L, 51268L, 130665L, 59704L), T.2

我有这样的数据

df<-structure(list(T = c(36034L, 63763L, 51432L, 65100L, 61444L, 
71012L, 266610L, 389787L, 47659L, 63156L, 84593L, 84331L), T.1 = c(45632L, 
66505L, 60360L, 36685L, 107551L, 53360L, 323952L, 344944L, 69601L, 
51268L, 130665L, 59704L), T.2 = c(59025L, 52837L, 68571L, 35788L, 
75262L, 66601L, 424683L, 340948L, 79487L, 42809L, 95607L, 81739L
), BG = c(74767L, 48210L, 70972L, 67705L, 85576L, 89265L, 393380L, 
306633L, 77816L, 73611L, 106317L, 116890L), BG.1 = c(50846L, 
37970L, 63896L, 78296L, 81216L, 62308L, 62613L, 21770L, 80955L, 
88832L, 97586L, 68345L), BG.2 = c(26688L, 27830L, 17010L, 54074L, 
26727L, 31109L, 24448L, 38701L, 17378L, 46327L, 25324L, 25325L
), TR = c(16498L, 26604L, 41201L, 38417L, 43709L, 33217L, 69943L, 
80638L, 37444L, 31701L, 46781L, 31152L), TR.1 = c(16272L, 24485L, 
14546L, 74756L, 28193L, 770L, 72238L, 78418L, 9161L, 48618L, 
26466L, 1078L), TR.2 = c(20612L, 713L, 18114L, 57872L, 25684L, 
27985L, 73618L, 1770L, 11953L, 33347L, 25824L, 25860L)), row.names = c("A", 
"B", "C", "D", "E", "F", "A_Mo1", "B_Mo1", "C_Mo1", "D_Mo1", 
"E_Mo1", "F_Mo1"), class = "data.frame")
另一种方式

dataused <- c("1:3","4:6","7:9")
medians <- sapply(dataused,function(y)
  c(by(df[,eval(parse(text=y))],median(unlist(x)))))
一种选择是中位数

或者只使用base R

一种选择是中位数

或者只使用base R


您没有指定要计算中位数的列。但是,您可以将apply与MARGIN参数一起使用为1,它按行执行操作。根据data.frame的大小,它可能会稍微低效。假设要对前三列执行此操作:

cols <- c("T", "T.1", "T.2")

newCols <- paste0("median_", paste0(cols, collapse = "_"))

df[[newCols]] <- apply(df[, cols], MARGIN=1, FUN=median)
对于数据完整性,请参见表:


您没有指定要计算中位数的列。但是,您可以将apply与MARGIN参数一起使用为1,它按行执行操作。根据data.frame的大小,它可能会稍微低效。假设要对前三列执行此操作:

cols <- c("T", "T.1", "T.2")

newCols <- paste0("median_", paste0(cols, collapse = "_"))

df[[newCols]] <- apply(df[, cols], MARGIN=1, FUN=median)
为确保完整性,请使用data.table:


您可以使用dplyr和rowwise

df %>% rowwise() %>% mutate(T_median = median(T, T.1, T.2), BG_median = median(BG, BG.1,BG.2), TR_median = median(TR, TR.1, TR.2))



        T    T.1    T.2     BG  BG.1  BG.2    TR  TR.1  TR.2 T_median BG_median TR_median
    <int>  <int>  <int>  <int> <int> <int> <int> <int> <int>    <int>     <int>     <int>
 1  36034  45632  59025  74767 50846 26688 16498 16272 20612    36034     74767     16498
 2  63763  66505  52837  48210 37970 27830 26604 24485   713    63763     48210     26604
 3  51432  60360  68571  70972 63896 17010 41201 14546 18114    51432     70972     41201
 4  65100  36685  35788  67705 78296 54074 38417 74756 57872    65100     67705     38417
 5  61444 107551  75262  85576 81216 26727 43709 28193 25684    61444     85576     43709
 6  71012  53360  66601  89265 62308 31109 33217   770 27985    71012     89265     33217
 7 266610 323952 424683 393380 62613 24448 69943 72238 73618   266610    393380     69943
 8 389787 344944 340948 306633 21770 38701 80638 78418  1770   389787    306633     80638
 9  47659  69601  79487  77816 80955 17378 37444  9161 11953    47659     77816     37444
10  63156  51268  42809  73611 88832 46327 31701 48618 33347    63156     73611     31701
11  84593 130665  95607 106317 97586 25324 46781 26466 25824    84593    106317     46781
12  84331  59704  81739 116890 68345 25325 31152  1078 25860    84331    116890     31152

您可以使用dplyr和rowwise

df %>% rowwise() %>% mutate(T_median = median(T, T.1, T.2), BG_median = median(BG, BG.1,BG.2), TR_median = median(TR, TR.1, TR.2))



        T    T.1    T.2     BG  BG.1  BG.2    TR  TR.1  TR.2 T_median BG_median TR_median
    <int>  <int>  <int>  <int> <int> <int> <int> <int> <int>    <int>     <int>     <int>
 1  36034  45632  59025  74767 50846 26688 16498 16272 20612    36034     74767     16498
 2  63763  66505  52837  48210 37970 27830 26604 24485   713    63763     48210     26604
 3  51432  60360  68571  70972 63896 17010 41201 14546 18114    51432     70972     41201
 4  65100  36685  35788  67705 78296 54074 38417 74756 57872    65100     67705     38417
 5  61444 107551  75262  85576 81216 26727 43709 28193 25684    61444     85576     43709
 6  71012  53360  66601  89265 62308 31109 33217   770 27985    71012     89265     33217
 7 266610 323952 424683 393380 62613 24448 69943 72238 73618   266610    393380     69943
 8 389787 344944 340948 306633 21770 38701 80638 78418  1770   389787    306633     80638
 9  47659  69601  79487  77816 80955 17378 37444  9161 11953    47659     77816     37444
10  63156  51268  42809  73611 88832 46327 31701 48618 33347    63156     73611     31701
11  84593 130665  95607 106317 97586 25324 46781 26466 25824    84593    106317     46781
12  84331  59704  81739 116890 68345 25325 31152  1078 25860    84331    116890     31152
可以使用“应用族”函数在基础中执行此操作

tapplydf1,1,tapply,gl3,3,中值,na.rm=真 > 1 2 3 >A 456325084616498 >B 63763 37970 24485 >C 60360 63896 18114 >D 36685 67705 57872 >E 75262 81216 28193 >F 66601 62308 27985 >A_Mo1 323952 62613 72238 >B_Mo1 344944 38701 78418 >C_Mo1 69601 77816 11953 >杜莫15126873611 33347 >E_Mo1 95607 97586 26466 >法乌莫1 81739 68345 25860 可以使用“应用族”函数在基础中执行此操作

tapplydf1,1,tapply,gl3,3,中值,na.rm=真 > 1 2 3 >A 456325084616498 >B 63763 37970 24485 >C 60360 63896 18114 >D 36685 67705 57872 >E 75262 81216 28193 >F 66601 62308 27985 >A_Mo1 323952 62613 72238 >B_Mo1 344944 38701 78418 >C_Mo1 69601 77816 11953 >杜莫15126873611 33347 >E_Mo1 95607 97586 26466 >法乌莫1 81739 68345 25860
我希望行名称也在那里,但您要删除什么them@Learner如果您查看我的基本R解决方案,它不会删除它们。是否也可以为每个解决方案添加SD?@Learner使用相同的代码,您可以将rowMedians更改为rowSds或从第二个案例df[paste0uniquenm1,_SD]我怎样才能一次完成所有操作,这样以后就不需要合并它们了?此外,中位数或sd不会在列中打印它。我希望行名称也在列中,但要删除什么them@Learner如果您查看我的基本R解决方案,它不会删除它们。是否也可以为每个解决方案添加SD?@Learner使用相同的代码,您可以将rowMedians更改为rowSds或从第二个案例df[paste0uniquenm1,_SD]我怎样才能一次完成所有操作,这样以后就不需要合并它们了?此外_median或_sd不在列中打印它,或tapplydf1,1,tapply,gl3,3,sd,na.rm=TRUE以获得sd。然后可以使用cbind将它们粘贴在一起。或者使用tapplydf1、1、tapply、gl3、3、sd、na.rm=TRUE获得sd。然后可以使用cbind将它们粘贴在一起。
cols <- c("T", "T.1", "T.2")

newCols <- paste0("median_", paste0(cols, collapse = "_"))

df[[newCols]] <- apply(df[, cols], MARGIN=1, FUN=median)
> df
           T    T.1    T.2     BG  BG.1  BG.2    TR  TR.1  TR.2 median_T_T.1_T.2
A      36034  45632  59025  74767 50846 26688 16498 16272 20612            45632
B      63763  66505  52837  48210 37970 27830 26604 24485   713            63763
C      51432  60360  68571  70972 63896 17010 41201 14546 18114            60360
D      65100  36685  35788  67705 78296 54074 38417 74756 57872            36685
E      61444 107551  75262  85576 81216 26727 43709 28193 25684            75262
F      71012  53360  66601  89265 62308 31109 33217   770 27985            66601
A_Mo1 266610 323952 424683 393380 62613 24448 69943 72238 73618           323952
B_Mo1 389787 344944 340948 306633 21770 38701 80638 78418  1770           344944
C_Mo1  47659  69601  79487  77816 80955 17378 37444  9161 11953            69601
D_Mo1  63156  51268  42809  73611 88832 46327 31701 48618 33347            51268
E_Mo1  84593 130665  95607 106317 97586 25324 46781 26466 25824            95607
F_Mo1  84331  59704  81739 116890 68345 25325 31152  1078 25860            81739
cols <- c("T", "T.1", "T.2")
newCols <- paste0("median_", paste0(cols, collapse = "_"))
df[, (newCols) := apply(.SD, 1, median), .SDcols=cols]
df %>% rowwise() %>% mutate(T_median = median(T, T.1, T.2), BG_median = median(BG, BG.1,BG.2), TR_median = median(TR, TR.1, TR.2))



        T    T.1    T.2     BG  BG.1  BG.2    TR  TR.1  TR.2 T_median BG_median TR_median
    <int>  <int>  <int>  <int> <int> <int> <int> <int> <int>    <int>     <int>     <int>
 1  36034  45632  59025  74767 50846 26688 16498 16272 20612    36034     74767     16498
 2  63763  66505  52837  48210 37970 27830 26604 24485   713    63763     48210     26604
 3  51432  60360  68571  70972 63896 17010 41201 14546 18114    51432     70972     41201
 4  65100  36685  35788  67705 78296 54074 38417 74756 57872    65100     67705     38417
 5  61444 107551  75262  85576 81216 26727 43709 28193 25684    61444     85576     43709
 6  71012  53360  66601  89265 62308 31109 33217   770 27985    71012     89265     33217
 7 266610 323952 424683 393380 62613 24448 69943 72238 73618   266610    393380     69943
 8 389787 344944 340948 306633 21770 38701 80638 78418  1770   389787    306633     80638
 9  47659  69601  79487  77816 80955 17378 37444  9161 11953    47659     77816     37444
10  63156  51268  42809  73611 88832 46327 31701 48618 33347    63156     73611     31701
11  84593 130665  95607 106317 97586 25324 46781 26466 25824    84593    106317     46781
12  84331  59704  81739 116890 68345 25325 31152  1078 25860    84331    116890     31152