我有一个如下所示的数据集。
dataA=structure(list(tissue = c("Head", "Head", "Head", "Stem", "Stem","Stem", "Head", "Head", "Head", "Stem", "Stem", "Stem", "Head","Head", "Head", "Stem", "Stem", "Stem", "Head", "Head", "Head","Stem", "Stem", "Stem", "Head", "Head", "Head", "Stem", "Stem","Stem", "Head", "Head", "Head", "Stem", "Stem", "Stem", "Head","Head", "Head", "Stem", "Stem", "Stem", "Head", "Head", "Head","Stem", "Stem", "Stem", "Head", "Head", "Head", "Stem", "Stem","Stem", "Head", "Head", "Head", "Stem", "Stem", "Stem", "Head","Head", "Head", "Stem", "Stem", "Stem", "Head", "Head", "Head","Stem", "Stem", "Stem", "Head", "Head", "Head", "Stem", "Stem","Stem", "Head", "Head", "Head", "Stem", "Stem", "Stem", "Head","Head", "Head", "Stem", "Stem", "Stem", "Head", "Head", "Head","Stem", "Stem", "Stem", "Head", "Head", "Head", "Stem", "Stem","Stem", "Head", "Head", "Head", "Stem", "Stem", "Stem", "Head","Head", "Head", "Stem", "Stem", "Stem", "Head", "Head", "Head","Stem", "Stem", "Stem", "Head", "Head", "Head", "Stem", "Stem","Stem", "Head", "Head", "Head", "Stem", "Stem", "Stem", "Head","Head", "Head", "Stem", "Stem", "Stem", "Head", "Head", "Head","Stem", "Stem", "Stem"), row = c("outside", "outside", "outside","outside", "outside", "outside", "outside", "outside", "outside","outside", "outside", "outside", "outside", "outside", "outside","outside", "outside", "outside", "outside", "outside", "outside","outside", "outside", "outside", "east", "east", "east", "east","east", "east", "east", "east", "east", "east", "east", "east","middle", "middle", "middle", "middle", "middle", "middle", "west","west", "west", "west", "west", "west", "west", "west", "west","west", "west", "west", "east", "east", "east", "east", "east","east", "east", "east", "east", "east", "east", "east", "middle","middle", "middle", "middle", "middle", "middle", "west", "west","west", "west", "west", "west", "west", "west", "west", "west","west", "west", "east", "east", "east", "east", "east", "east","east", "east", "east", "east", "east", "east", "middle", "middle","middle", "middle", "middle", "middle", "west", "west", "west","west", "west", "west", "west", "west", "west", "west", "west","west", "east", "east", "east", "east", "east", "east", "east","east", "east", "east", "east", "east", "middle", "middle", "middle","middle", "middle", "middle", "west", "west", "west", "west","west", "west", "west", "west", "west", "west", "west", "west"), plot = c(5, 5, 5, 5, 5, 5, 6, 6, 6, 6, 6, 6, 7, 7, 7, 7, 7,7, 8, 8, 8, 8, 8, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2,2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4,4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,4), treatment = c("Control", "Tr1", "Tr2", "Control", "Tr1","Tr2", "Control", "Tr1", "Tr2", "Control", "Tr1", "Tr2", "Control","Tr1", "Tr2", "Control", "Tr1", "Tr2", "Control", "Tr1", "Tr2","Control", "Tr1", "Tr2", "Control", "Tr1", "Tr2", "Control","Tr1", "Tr2", "Control", "Tr1", "Tr2", "Control", "Tr1", "Tr2","Control", "Tr1", "Tr2", "Control", "Tr1", "Tr2", "Control","Tr1", "Tr2", "Control", "Tr1", "Tr2", "Control", "Tr1", "Tr2","Control", "Tr1", "Tr2", "Control", "Tr1", "Tr2", "Control","Tr1", "Tr2", "Control", "Tr1", "Tr2", "Control", "Tr1", "Tr2","Control", "Tr1", "Tr2", "Control", "Tr1", "Tr2", "Control","Tr1", "Tr2", "Control", "Tr1", "Tr2", "Control", "Tr1", "Tr2","Control", "Tr1", "Tr2", "Control", "Tr1", "Tr2", "Control","Tr1", "Tr2", "Control", "Tr1", "Tr2", "Control", "Tr1", "Tr2","Control", "Tr1", "Tr2", "Control", "Tr1", "Tr2", "Control","Tr1", "Tr2", "Control", "Tr1", "Tr2", "Control", "Tr1", "Tr2","Control", "Tr1", "Tr2", "Control", "Tr1", "Tr2", "Control","Tr1", "Tr2", "Control", "Tr1", "Tr2", "Control", "Tr1", "Tr2","Control", "Tr1", "Tr2", "Control", "Tr1", "Tr2", "Control","Tr1", "Tr2", "Control", "Tr1", "Tr2", "Control", "Tr1", "Tr2","Control", "Tr1", "Tr2"), yield = c(159.3, 59.7, 97.5, 74.65,34.05, 76.65, 99.3, 109, 82.3, 53.95, 52.95, 65.45, 119.4, 90.3,95.6, 61.65, 48.65, 83.15, 94.2, 291.6, 111.9, 77.55, 151.45,91.15, 52.5, 36.8, 25.2, 35.25, 27.85, 35.75, 73.4, 42.5, 38.9,48.55, 30.45, 53.45, 71.8, 69.6, 48.1, 51.95, 44.45, 64.55, 98.1,90, 48, 65.75, 54.05, 68.05, 66.7, 54.2, 42.3, 46.55, 36.25,51.15, 87.4, 77, 48.6, 59.75, 44.95, 58.05, 51.4, 48.6, 37.4,42.25, 44.15, 40.15, 71.4, 50.8, 7.4, 49.05, 31.15, 86.65, 68.8,92, 53.7, 59.35, 54.55, 65.35, 63, 38.9, 37.5, 46.35, 31.75,50.15, 80, 58.6, 60, 50.65, 35.05, 70.95, 77.8, 50.4, 30.6, 51.55,28.25, 37.15, 53.2, 61.9, 45.1, 32.45, 34.75, 53.45, 69.3, 49.2,39.4, 50.15, 31.15, 50.75, 74.9, 46.3, 46.5, 44.95, 28.95, 49.65,70, 56.6, 56.5, 46.65, 36.45, 58.45, 81.9, 51.4, 64.2, 53.75,34.35, 77.55, 55.2, 49, 48.3, 32.05, 35.15, 49.85, 75.6, 66.7,73.2, 44.15, 36.85, 61.05, 74.6, 50, 40.2, 47.75, 31.65, 45.65), responsiveness = c(NA, "-62.5%", "-38.8%", NA, "-54.4%", "2.7%",NA, "9.8%", "-17.1%", NA, "-1.9%", "21.3%", NA, "-24.4%", "-19.9%",NA, "-21.1%", "34.9%", NA, "209.6%", "18.8%", NA, "95.3%", "17.5%",NA, "-29.9%", "-52.0%", NA, "-21.0%", "1.4%", NA, "-42.1%", "-47.0%",NA, "-37.3%", "10.1%", NA, "-3.1%", "-33.0%", NA, "-14.4%", "24.3%",NA, "-8.3%", "-51.1%", NA, "-17.8%", "3.5%", NA, "-18.7%", "-36.6%",NA, "-22.1%", "9.9%", NA, "-11.9%", "-44.4%", NA, "-24.8%", "-2.8%",NA, "-5.4%", "-27.2%", NA, "4.5%", "-5.0%", NA, "-28.9%", "-89.6%",NA, "-36.5%", "76.7%", NA, "33.7%", "-21.9%", NA, "-8.1%", "10.1%",NA, "-38.3%", "-40.5%", NA, "-31.5%", "8.2%", NA, "-26.8%", "-25.0%",NA, "-30.8%", "40.1%", NA, "-35.2%", "-60.7%", NA, "-45.2%","-27.9%", NA, "16.4%", "-15.2%", NA, "7.1%", "64.7%", NA, "-29.0%","-43.1%", NA, "-37.9%", "1.2%", NA, "-38.2%", "-37.9%", NA, "-35.6%","10.5%", NA, "-19.1%", "-19.3%", NA, "-21.9%", "25.3%", NA, "-37.2%","-21.6%", NA, "-36.1%", "44.3%", NA, "-11.2%", "-12.5%", NA,"9.7%", "55.5%", NA, "-11.8%", "-3.2%", NA, "-16.5%", "38.3%",NA, "-33.0%", "-46.1%", NA, "-33.7%", "-4.4%")), class = "data.frame", row.names = c(NA,-144L))
dataA
tissue row plot treatment yield responsiveness
1 Head outside 5 Control 159.30 <NA>
2 Head outside 5 Tr1 59.70 -62.5%
3 Head outside 5 Tr2 97.50 -38.8%
4 Stem outside 5 Control 74.65 <NA>
5 Stem outside 5 Tr1 34.05 -54.4%
6 Stem outside 5 Tr2 76.65 2.7%
7 Head outside 6 Control 99.30 <NA>
8 Head outside 6 Tr1 109.00 9.8%
9 Head outside 6 Tr2 82.30 -17.1%
10 Stem outside 6 Control 53.95 <NA>
11 Stem outside 6 Tr1 52.95 -1.9%
12 Stem outside 6 Tr2 65.45 21.3%
13 Head outside 7 Control 119.40 <NA>
14 Head outside 7 Tr1 90.30 -24.4%
15 Head outside 7 Tr2 95.60 -19.9%
16 Stem outside 7 Control 61.65 <NA>
17 Stem outside 7 Tr1 48.65 -21.1%
18 Stem outside 7 Tr2 83.15 34.9%
19 Head outside 8 Control 94.20 <NA>
20 Head outside 8 Tr1 291.60 209.6%
21 Head outside 8 Tr2 111.90 18.8%
22 Stem outside 8 Control 77.55 <NA>
23 Stem outside 8 Tr1 151.45 95.3%
24 Stem outside 8 Tr2 91.15 17.5%
25 Head east 1 Control 52.50 <NA>
26 Head east 1 Tr1 36.80 -29.9%
27 Head east 1 Tr2 25.20 -52.0%
28 Stem east 1 Control 35.25 <NA>
29 Stem east 1 Tr1 27.85 -21.0%
30 Stem east 1 Tr2 35.75 1.4%
我想计算响应其他处理的产量百分比。例如,Tr1 中的%产量计算为(Tr1 - 对照)/每组组合(组织、行和图)的对照,我使用 Excel 进行计算。
我想使用 R 进行计算,我使用了下面的代码。
但是,和我计算的不一样。例如,(59.70 - 159.30)/159.30 为 -0.625,但计算出的 R 为 -0.200267917。
你能告诉我如何像我在Excel中计算一样计算吗?
谢谢,
dataB=data.frame(dataA %>%
group_by(tissue, row, plot) %>%
mutate(Calculation=ifelse(treatment!="Control",
(yield-yield[treatment=="Control"])/yield[treatment=="Control"], NA)))
dataB
tissue row plot treatment yield responsiveness Calculation
1 Head outside 5 Control 159.30 <NA> NA
2 Head outside 5 Tr1 59.70 -62.5% -0.200267917
3 Head outside 5 Tr2 97.50 -38.8% -0.018126888
4 Stem outside 5 Control 74.65 <NA> NA
5 Stem outside 5 Tr1 34.05 -54.4% -0.714824121
6 Stem outside 5 Tr2 76.65 2.7% 0.243309002
7 Head outside 6 Control 99.30 <NA> NA
8 Head outside 6 Tr1 109.00 9.8% 0.405544810
9 Head outside 6 Tr2 82.30 -17.1% 0.567619048
10 Stem outside 6 Control 53.95 <NA> NA
11 Stem outside 6 Tr1 52.95 -1.9% -0.278610354
12 Stem outside 6 Tr2 65.45 21.3% 0.348094748
13 Head outside 7 Control 119.40 <NA> NA
14 Head outside 7 Tr1 90.30 -24.4% 0.738209817
15 Head outside 7 Tr2 95.60 -19.9% -0.025484200
16 Stem outside 7 Control 61.65 <NA> NA
17 Stem outside 7 Tr1 48.65 -21.1% -0.270614693
18 Stem outside 7 Tr2 83.15 34.9% 0.786251343
19 Head outside 8 Control 94.20 <NA> NA
20 Head outside 8 Tr1 291.60 209.6% 3.880334728
21 Head outside 8 Tr2 111.90 18.8% 1.177042802
22 Stem outside 8 Control 77.55 <NA> NA
23 Stem outside 8 Tr1 151.45 95.3% 1.121148459
24 Stem outside 8 Tr2 91.15 17.5% 0.858307849
25 Head east 1 Control 52.50 <NA> NA
26 Head east 1 Tr1 36.80 -29.9% -0.379949452
27 Head east 1 Tr2 25.20 -52.0% -0.600000000
请尝试以下代码
library(dplyr)
result <- dataA %>%
group_by(tissue, row, plot) %>%
mutate(PercentageChange = ifelse(treatment == "Control", NA, (yield - yield[treatment == "Control"]) / yield[treatment == "Control"] * 100))
# OUTPUT
# A tibble: 6 × 6
# Groups: tissue, row, plot [2]
tissue row plot treatment yield PercentageChange
<chr> <chr> <int> <chr> <dbl> <dbl>
1 Head outside 5 Control 159. NA
2 Head outside 5 Tr1 59.7 -62.5
3 Head outside 5 Tr2 97.5 -38.8
4 Stem outside 5 Control 74.6 NA
5 Stem outside 5 Tr1 34.0 -54.4
6 Stem outside 5 Tr2 76.6 2.68