使用变量标识符从R中的excel中读取数据



我有一个很大的excel文件,里面有6张表格。每张表格有3个识别变量(以及许多其他变量(,每个主题都有一个值。R(使用Rstudio(有没有办法通过用这3个变量识别受试者来吐出剩余的变量。从本质上讲,我希望能够指定哪一张表,并将每个标识符的值指定为一个代码,该代码将吐出该主题的剩余数据。请告诉我一个例子是否有用。

我的数据格式像这个例子,但在一个excel文件中有5张这样的表格。我想生成一个代码(在映射文件后(,在这里我可以在文件的指定表中输入我的标识符(通过I.D和时间点,例如(1234,时间点1((,然后输出该主题的其他变量的值,例如SR分数。我知道这在R中可能是不可能的,因此我提出了问题。示例数据

我假设您已经知道如何在R中加载Excel工作表。如果没有,请告诉我。然后,问题是如何找到与前三个变量匹配的元素。如果我们能够识别它们,那么找到其余的变量是微不足道的。

一种方法是编写一个函数来为您做这件事。它将前三个变量与您输入的内容相匹配,并返回匹配元素的索引。

which()返回满足条件的项的索引。当我说which(df[,1] == a)时,它将返回df中第一列与a匹配的观测索引。然后,您可以使用intersect()来查找x1x2x3中的公共索引。我正在使用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,])
}

最新更新