我有一个如下所示的数据框:
Age A1U_sweet A2F_dip A3U_bbq C1U_sweet C2F_dip C3U_bbq Comments
23 1 2 1 NA NA NA Good
54 NA NA NA 4 1 2 ABCD
43 2 4 7 NA NA NA HiHi
我正在尝试运行一系列t.tests来比较以A#开头的列和以C#开头的相应列。我通过为每对列键入以下内容手动执行此操作。
t.test(df$A1U_sweet, df$C1U_sweet)
我有办法为A1U和C1U,A2U和C2U以及A3U和C3U运行t.tests吗?我尝试使用apply函数和for循环但是无法弄清楚如何在这个实例中使这些工作。
df <- read.table(header = TRUE, stringsAsFactors = FALSE, text = "
Age A1U_sweet A2F_dip A3U_bbq C1U_sweet C2F_dip C3U_bbq Comments
23 1 2 1 2 5 5 Good
54 1 3 1 4 1 2 ABCD
43 2 4 7 1 1 1 HiHi")
答案 0 :(得分:1)
如果我们需要在相应的&#39; 1&#39;,&#39; 2s&#39;上执行t.test
和&#39; 3s&#39;为了&#39; A&#39;和&#39; C&#39;,然后split
数据集基于列名称的子字符串,仅包含数字,然后应用t.test
lapply(split.default(df[2:7], gsub("\\D+", "", names(df)[2:7])), t.test)
答案 1 :(得分:1)
任务本身并不困难或复杂,但由于数据的排列方式,它似乎是这样。当您看到传达多个信息的变量名称时,自问是否可以更简单地排列数据通常会很有帮助。这个简单的主张是R中流行的“整洁”数据操作方法的核心。虽然我不是那些以“整洁”的名义所做的一切的粉丝,但这个核心主张是健全的,而你违反它(正如你在这里所做的那样)只会冒你的分析比你需要的更困难的风险。
好的第一步是重新排列数据,以便数据不会以列名编码:
<li class="dropdown" id="modus">
<a href="#">Modus</a>
<div class="dropdown-content">
<a href="#" class="mode radio" >ExRaid</a>
<a href="#" class="mode radio" >Trigger</a>
</div>
</li>
这可能看起来很多工作,但它使数据更容易使用,而且不仅仅适用于此特定操作。
现在数据已经转换为理智的安排,实际任务非常简单:
df <- read.table(header = TRUE, stringsAsFactors = FALSE, text = "
Age A1U_sweet A2F_dip A3U_bbq C1U_sweet C2F_dip C3U_bbq Comments
23 1 2 1 2 5 5 Good
54 1 3 1 4 1 2 ABCD
43 2 4 7 1 1 1 HiHi")
library(tidyr)
df <- data.frame(id = 1:nrow(df), df)
dfl <- gather(df, key = "key", value = "value", -id, -Age, -Comments)
dfl <- separate(dfl, key, into = c("key", "kind", "type"), sep = c(1, 4))
dfl
## id Age Comments key kind type value
## 1 1 23 Good A 1U_ sweet 1
## 2 2 54 ABCD A 1U_ sweet 1
## 3 3 43 HiHi A 1U_ sweet 2
## 4 1 23 Good A 2F_ dip 2
## 5 2 54 ABCD A 2F_ dip 3
## 6 3 43 HiHi A 2F_ dip 4
## 7 1 23 Good A 3U_ bbq 1
## 8 2 54 ABCD A 3U_ bbq 1
## 9 3 43 HiHi A 3U_ bbq 7
## 10 1 23 Good C 1U_ sweet 2
## 11 2 54 ABCD C 1U_ sweet 4
## 12 3 43 HiHi C 1U_ sweet 1
## 13 1 23 Good C 2F_ dip 5
## 14 2 54 ABCD C 2F_ dip 1
## 15 3 43 HiHi C 2F_ dip 1
## 16 1 23 Good C 3U_ bbq 5
## 17 2 54 ABCD C 3U_ bbq 2
## 18 3 43 HiHi C 3U_ bbq 1