R dcast更改数据帧的内容
我尝试使用重塑包来重塑我得到的数据帧,但当使用它时,数据帧中的数字会发生变化,这是不应该发生的 数据框包含多个变量以及这些变量被测量的次数,每个人有6行,即该人被测量的6倍。现在,我想重塑数据帧,使每个人只有一行,而不是6行,这意味着每个变量都应该有6次(每次测量一次),这应该可以通过以下代码轻松完成:R dcast更改数据帧的内容,r,casting,reshape,reshape2,R,Casting,Reshape,Reshape2,我尝试使用重塑包来重塑我得到的数据帧,但当使用它时,数据帧中的数字会发生变化,这是不应该发生的 数据框包含多个变量以及这些变量被测量的次数,每个人有6行,即该人被测量的6倍。现在,我想重塑数据帧,使每个人只有一行,而不是6行,这意味着每个变量都应该有6次(每次测量一次),这应该可以通过以下代码轻松完成: melteddata <- melt(daten, id=(c("IDParticipant", "looporder"))) datenrestrukturiert <- dca
melteddata <- melt(daten, id=(c("IDParticipant", "looporder")))
datenrestrukturiert <- dcast(melteddata, IDParticipant~looporder+variable)
datenrestrukturiert如下所示:
我不想聚合或做任何事情,这就是为什么我尝试添加fun.aggregate=NULL
而不做任何更改,同时始终会出现以下消息:
“缺少聚合函数:默认为长度”
到目前为止,一切都正常,但有一个问题:当使用dcast(以及cast)时,变量中的一些数字会被更改,大多数是“0”或“1”,但通常会有一些其他数字,如“3.44”或“4.77”或类似的数字,但在计算cast时,它们大多会更改为“0”
有人知道为什么会这样吗
可能会有帮助的更多信息:当我通过read.csv2导入数据集时,我总是会得到第一个变量的奇怪名称,即变量名称前面的符号比Excel中显示的多:“ï..IDParticipant”,我将其重命名为“IDParticipant”,这与此有关吗
另一个附带事实:使用我提供的sampleframe运行它,一切正常,原始数据帧由1404行和353个变量组成,它对R来说可能太大了吗?如果您有重复的LHS和RHS变量组合,那么您需要(1)创建一个二级ID,或者(2)执行某种形式的聚合 您可以使用
any(duplicated(…))
测试重复项
下面是一个示例,使用您现有的“daten”示例(其中不包含重复项):
在此情况下,您可以考虑从我的“SPLITSTACKFILE”包中使用<代码> GATANID<代码>,以便方便地向数据集添加一个辅助ID。
library(splitstackshape)
melteddata2 <- melt(getanID(daten2, idvars), c(".id", idvars))
datenrestrukturiert2 <- dcast.data.table(
melteddata2, .id + IDParticipant ~ looporder + variable)
datenrestrukturiert2
# .id IDParticipant 1_pc_mean_1 1_bd_mean_1 1_sm 1_cm 2_pc_mean_1 2_bd_mean_1 2_sm
# 1: 1 1 NA NA 999 999 3.222222 2.888889 4
# 2: 1 2 NA NA NA NA 3.666667 2.750000 4
# 3: 1 3 3.25 4.083333 5 3 NA NA 999
# 4: 2 1 NA NA 999 999 NA NA NA
# 5: 2 2 NA NA NA NA 3.666667 2.750000 4
# 2_cm 3_pc_mean_1 3_bd_mean_1 3_sm 3_cm 5_pc_mean_1 5_bd_mean_1 5_sm
# 1: 1.333333 NA NA 999 999.000000 3.222222 2.888889 3.666667
# 2: 2.000000 3.666667 2.750000 4 2.000000 3.666667 2.750000 5.000000
# 3: 999.000000 3.250000 4.083333 5 1.666667 NA NA NA
# 4: NA NA NA NA NA 3.222222 2.888889 3.666667
# 5: 2.000000 NA NA NA NA NA NA NA
# 5_cm 6_pc_mean_1 6_bd_mean_1 6_sm 6_cm
# 1: 2.333333 3.222222 2.888889 1 1
# 2: 2.333333 3.666667 2.750000 5 1
# 3: NA NA NA NA NA
# 4: 2.333333 NA NA NA NA
# 5: NA NA NA NA NA
库(splitstackshape)
melteddata2如果您有重复的LHS和RHS变量组合,那么您需要(1)创建二级ID,或者(2)执行某种形式的聚合
您可以使用any(duplicated(…))
测试重复项
下面是一个示例,使用您现有的“daten”示例(其中不包含重复项):
在此情况下,您可以考虑从我的“SPLITSTACKFILE”包中使用<代码> GATANID<代码>,以便方便地向数据集添加一个辅助ID。
library(splitstackshape)
melteddata2 <- melt(getanID(daten2, idvars), c(".id", idvars))
datenrestrukturiert2 <- dcast.data.table(
melteddata2, .id + IDParticipant ~ looporder + variable)
datenrestrukturiert2
# .id IDParticipant 1_pc_mean_1 1_bd_mean_1 1_sm 1_cm 2_pc_mean_1 2_bd_mean_1 2_sm
# 1: 1 1 NA NA 999 999 3.222222 2.888889 4
# 2: 1 2 NA NA NA NA 3.666667 2.750000 4
# 3: 1 3 3.25 4.083333 5 3 NA NA 999
# 4: 2 1 NA NA 999 999 NA NA NA
# 5: 2 2 NA NA NA NA 3.666667 2.750000 4
# 2_cm 3_pc_mean_1 3_bd_mean_1 3_sm 3_cm 5_pc_mean_1 5_bd_mean_1 5_sm
# 1: 1.333333 NA NA 999 999.000000 3.222222 2.888889 3.666667
# 2: 2.000000 3.666667 2.750000 4 2.000000 3.666667 2.750000 5.000000
# 3: 999.000000 3.250000 4.083333 5 1.666667 NA NA NA
# 4: NA NA NA NA NA 3.222222 2.888889 3.666667
# 5: 2.000000 NA NA NA NA NA NA NA
# 5_cm 6_pc_mean_1 6_bd_mean_1 6_sm 6_cm
# 1: 2.333333 3.222222 2.888889 1 1
# 2: 2.333333 3.666667 2.750000 5 1
# 3: NA NA NA NA NA
# 4: 2.333333 NA NA NA NA
# 5: NA NA NA NA NA
库(splitstackshape)
melteddata2这是我基于Anandas建议的解决方案(非常感谢)
dataframe是“daten”,包含许多变量,例如“IDParticipant”、“looporder”和“sm”
首先,我们需要创建一个包含变量的对象,以便以后使用melt-and-cast函数
idvars这是我基于Anandas建议的解决方案(非常感谢)
dataframe是“daten”,包含许多变量,例如“IDParticipant”、“looporder”和“sm”
首先,我们需要创建一个包含变量的对象,以便以后使用melt-and-cast函数
IDVAR每个变量组合有多个值吗?你能分享一些输入和输出的例子吗?嗨,欢迎来到SO。我们无法根据推测回答您的问题;我们需要知道你的数据是什么样子的。请提供任何(重复的(日期[c(“IDParticipant”,“looporder”)))
的结果是什么?我得到的结果是TRUE@psytar,则必须添加辅助ID才能继续。每个变量组合是否有多个值?你能分享一些输入和输出的例子吗?嗨,欢迎来到SO。我们无法根据推测回答您的问题;我们需要知道你的数据是什么样子的。请提供任何(重复的(日期[c(“IDParticipant”,“looporder”)))
的结果是什么?我得到的结果是TRUE@psytar,然后您必须添加一个辅助ID才能继续。非常感谢您的回答,很遗憾,我不完全理解您的意思,不应该有任何重复,但正如你所说,测试这个的函数说有,你对LHS和RHS变量的意思是什么?我不熟悉那里的住址,非常感谢你的帮助@psytar,左手边和右手边,参考公式。编辑:它现在不知怎么起作用了,我会弄清楚它是如何起作用的,答案非常感谢你的回答,不幸的是,我不完全理解你的意思,不应该有任何重复,但正如你所说,测试这个的函数说有,LHS和RHS变量是什么意思?我不熟悉那里的住址,非常感谢你的帮助@psytar,左手边和右手边,参考公式。编辑:它现在不知怎么起作用了,我会找出答案
daten2 <- rbind(daten, daten[c(1, 4, 6), ])
any(duplicated(daten2[idvars]))
# [1] TRUE
library(splitstackshape)
melteddata2 <- melt(getanID(daten2, idvars), c(".id", idvars))
datenrestrukturiert2 <- dcast.data.table(
melteddata2, .id + IDParticipant ~ looporder + variable)
datenrestrukturiert2
# .id IDParticipant 1_pc_mean_1 1_bd_mean_1 1_sm 1_cm 2_pc_mean_1 2_bd_mean_1 2_sm
# 1: 1 1 NA NA 999 999 3.222222 2.888889 4
# 2: 1 2 NA NA NA NA 3.666667 2.750000 4
# 3: 1 3 3.25 4.083333 5 3 NA NA 999
# 4: 2 1 NA NA 999 999 NA NA NA
# 5: 2 2 NA NA NA NA 3.666667 2.750000 4
# 2_cm 3_pc_mean_1 3_bd_mean_1 3_sm 3_cm 5_pc_mean_1 5_bd_mean_1 5_sm
# 1: 1.333333 NA NA 999 999.000000 3.222222 2.888889 3.666667
# 2: 2.000000 3.666667 2.750000 4 2.000000 3.666667 2.750000 5.000000
# 3: 999.000000 3.250000 4.083333 5 1.666667 NA NA NA
# 4: NA NA NA NA NA 3.222222 2.888889 3.666667
# 5: 2.000000 NA NA NA NA NA NA NA
# 5_cm 6_pc_mean_1 6_bd_mean_1 6_sm 6_cm
# 1: 2.333333 3.222222 2.888889 1 1
# 2: 2.333333 3.666667 2.750000 5 1
# 3: NA NA NA NA NA
# 4: 2.333333 NA NA NA NA
# 5: NA NA NA NA NA