我有一个很大的excel文件,里面有6张表格。每张表格有3个识别变量(以及许多其他变量(,每个主题都有一个值。R(使用Rstudio(有没有办法通过用这3个变量识别受试者来吐出剩余的变量。从本质上讲,我希望能够指定哪一张表,并将每个标识符的值指定为一个代码,该代码将吐出该主题的剩余数据。请告诉我一个例子是否有用。
我的数据格式像这个例子,但在一个excel文件中有5张这样的表格。我想生成一个代码(在映射文件后(,在这里我可以在文件的指定表中输入我的标识符(通过I.D和时间点,例如(1234,时间点1((,然后输出该主题的其他变量的值,例如SR分数。我知道这在R中可能是不可能的,因此我提出了问题。示例数据
我假设您已经知道如何在R中加载Excel工作表。如果没有,请告诉我。然后,问题是如何找到与前三个变量匹配的元素。如果我们能够识别它们,那么找到其余的变量是微不足道的。
一种方法是编写一个函数来为您做这件事。它将前三个变量与您输入的内容相匹配,并返回匹配元素的索引。
which()
返回满足条件的项的索引。当我说which(df[,1] == a)
时,它将返回df
中第一列与a
匹配的观测索引。然后,您可以使用intersect()
来查找x1
、x2
和x3
中的公共索引。我正在使用magrittr管道%>%以简化编码。
check_this = function(df, a, b, c)
{
x1 = which(df[,1] == a)
x2 = which(df[,2] == b)
x3 = which(df[,3] == c)
v = intersect(x1, x2) %>%
intersect(x3)
return(v)
}
最小工作示例首先,我将创建一个伪数据帧。然后,我将使用刚刚创建的函数找到索引。
df = tibble(var1 = 1:10,
var2 = 11:20,
var3 = letters[1:10],
var4 = LETTERS[1:10])
> df
# A tibble: 10 × 4
var1 var2 var3 var4
<int> <int> <chr> <chr>
1 1 11 a A
2 2 12 b B
3 3 13 c C
4 4 14 d D
5 5 15 e E
6 6 16 f F
7 7 17 g G
8 8 18 h H
9 9 19 i I
10 10 20 j J
# the function
check_this = function(df, a, b, c)
{
x1 = which(df[,1] == a)
x2 = which(df[,2] == b)
x3 = which(df[,3] == c)
v = intersect(x1, x2) %>%
intersect(x3)
return(v)
}
现在,让我们看看它在行动。首先,我将传递数据帧和要匹配的变量作为参数。函数将返回我将存储在l
中的索引。然后,我会让R给我看在l
中有索引号的行。
# checking and storing the index of matched
l = check_this(df, 2, 12, "b")
> df[l,]
# A tibble: 1 × 4
var1 var2 var3 var4
<int> <int> <chr> <chr>
1 2 12 b B
注意:通过返回数据帧本身的选定行,您可以跳过在l
中存储索引的步骤。该函数将更改为以下内容。
# the function
check_this = function(df, a, b, c)
{
x1 = which(df[,1] == a)
x2 = which(df[,2] == b)
x3 = which(df[,3] == c)
v = intersect(x1, x2) %>%
intersect(x3)
return(df[v,])
}