Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.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_Sorting - Fatal编程技术网

R 存储为因子的数值排序列表

R 存储为因子的数值排序列表,r,sorting,R,Sorting,我有4个数据帧,数据来自不同的实验,每一行代表一次试验。参与者的id(SID)存储为一个因子。每个数据帧如下所示: 实验1: SID trial measure 5402 1 0.6403791 5402 2 -1.8515095 5402 3 -4.8158912 25403 1 NA 25403 2 -3.9424822 25403 3 -2.2100059 我想用每个实验参与者的i

我有4个数据帧,数据来自不同的实验,每一行代表一次试验。参与者的id(SID)存储为一个因子。每个数据帧如下所示:

实验1:

SID     trial   measure
 5402       1  0.6403791
 5402       2 -1.8515095
 5402       3 -4.8158912
25403       1         NA
25403       2 -3.9424822
25403       3 -2.2100059
我想用每个实验参与者的id制作一个新的数据框,例如:

   Exp1        Exp2        Exp3        Exp4
    5402       22081       22160       25434
   25403       22069       22179       25439
   25485       22115       22141       25408
   25457       22120       22185       25445
   28041       22448       22239       25473
   29514       22492       22291       25489
我希望每列都按数字排序,也就是说,2在10之前

我使用unique()提取每个数据帧中的参与者id(SID),但在排序列时遇到问题

我尝试使用:

data.frame(order(unique(df1$SID)),
           order(unique(df2$SID)),
           order(unique(df3$SID)),
           order(unique(df4$SID)))
我得到(没有列名):

我很抱歉,如果我遗漏了一些非常基本的东西,我对R还是很陌生的

谢谢你的帮助

编辑: 我在评论中尝试了解决方案,现在我已经:

x<-cbind(sort(as.numeric(unique(df1$SID)),decreasing = F), 
         sort(as.numeric(unique(df2$SID)),decreasing = F), 
         sort(as.numeric(unique(df3$SID)),decreasing = F), 
         sort(as.numeric(unique(df4$SID)),decreasing = F) )

主题id是3到5位数字…

如果您的数据如下所示:

df <- read.table(text="
  SID     trial   measure
 5402       1  0.6403791
 5402       2 -1.8515095
 5402       3 -4.8158912
25403       1         NA
25403       2 -3.9424822
25403       3 -2.2100059",
header=TRUE, colClasses = c("factor","integer","numeric"))
df <- df[order(as.numeric(as.character(df$SID)), trial),] # sort df on SID (numeric) & trial

split(df$SID, df$trial) # breaks the vector SID into a list of vectors of SID for each trial
这将为您提供每个试验的参与者ID列表,按数值排序,但保留其factor属性


如果您确实想要一个数据帧,并且每个实验的参与者数量相等,那么可以在列表中使用
data.frame()
,如:
data.frame(split(df$SID,df$trial))

假设x和y代表Exp1 SID和Exp2 SID。您可以创建唯一值的有序列表,如下所示:

x<-factor(x = c(2,5,4,3,6,1,4,5,6,3,2,3))
y<-factor(x = c(2,3,4,2,4,1,4,5,5,3,2,3))
list(exp1=sort(x = unique(x),decreasing = F),y=sort(x = unique(y),decreasing = F))

xI不理解您所面临的问题,请明确您期望的是什么以及您得到的是什么为什么您想要一个data.frame而不仅仅是每个实验的ID列表?使用data.frame表明(1)每个实验中的参与者数量相同,(2)给定行中的参与者有相同的内容common@vdep我用您询问的信息更新了问题@C8H10N4O2,它不需要是数据帧,我只是想要一张有谁参与了什么实验的表格。@Sininho没错,你可以通过
as.numeric(as.character(x))
正确地进行强制。参见下面的解决方案。这里的关键概念是因子如何工作。在内部,因子是一个整数
1,2。。。。n
表示不同级别的
n
。如果变量是
subject
,那么这些级别可能类似于
c(“数学”、“化学”、“哲学”)
,但更令人困惑的是,它们可能类似于
c(“5402”、“2543”)
,因此要获得
c(54022543)
而不是
c(1,2)
首先需要将其作为字符串获取(要删除
c(1,2)
representation),然后将其作为数字读回。
df <- df[order(as.numeric(as.character(df$SID)), trial),] # sort df on SID (numeric) & trial

split(df$SID, df$trial) # breaks the vector SID into a list of vectors of SID for each trial
lapply(split(df$SID, df$trial), unique) # breaks SID into list of unique SIDs for each trial
x<-factor(x = c(2,5,4,3,6,1,4,5,6,3,2,3))
y<-factor(x = c(2,3,4,2,4,1,4,5,5,3,2,3))
list(exp1=sort(x = unique(x),decreasing = F),y=sort(x = unique(y),decreasing = F))