R 从表结果中提取因子标签以用作数据框列
我正在使用原始行输入格式UID=character,Win/Lose=Boolean进行clickstream日志文件摘要。我要创建的输出摘要的格式为row UID、sumWin、sumLose。我已经使用了table来获得我想要的部分内容,但是我很难找到正确的语法来从表结果中提取因子标签,以便在摘要df中使用。下面的示例构建了一个小测试用例,并显示了我被卡住的地方:我无法从表结果中获取因子标签。(当然,你认为有一种更好的方式来处理整个事情——这显然也非常有用!) 我仍然在编辑中遇到格式问题-显然这是我下一步需要问的问题R 从表结果中提取因子标签以用作数据框列,r,dataframe,syntax,r-factor,R,Dataframe,Syntax,R Factor,我正在使用原始行输入格式UID=character,Win/Lose=Boolean进行clickstream日志文件摘要。我要创建的输出摘要的格式为row UID、sumWin、sumLose。我已经使用了table来获得我想要的部分内容,但是我很难找到正确的语法来从表结果中提取因子标签,以便在摘要df中使用。下面的示例构建了一个小测试用例,并显示了我被卡住的地方:我无法从表结果中获取因子标签。(当然,你认为有一种更好的方式来处理整个事情——这显然也非常有用!) 我仍然在编辑中遇到格式问题-显
foo <- data.frame(Uid=character(4), Win=logical(4), stringsAsFactors=FALSE)
foo$Uid <- c("UidA", "UidB", "UidA", "UidC")
foo$Win <- c(FALSE, TRUE, TRUE, FALSE)
#display foo
foo
Uid Win
1 UidA FALSE
2 UidB TRUE
3 UidA TRUE
4 UidC FALSE
# my desired summary df is, for each UID: NWin (foo$Win=TRUE), NRunUp (foo$Win=FALSE)
# here I initialise a holder for it
fooNUniques <- length(unique(foo$Uid))
fooSummary <- data.frame(Uids=character(fooNUniques),NWins=numeric(fooNUniques),NRunUps=numeric(fooNUniques))
fooSummary
Uids NWins NRunUps
1 0 0
2 0 0
3 0 0
#I can reference in to the result of applying table to get part of what I want
#First I get the table, this gets me a table by win/lose value
fooTable <- table(foo$Uid, foo$Win)
fooTable
FALSE TRUE
UidA 1 1
UidB 0 1
UidC 1 0
# I can get at the actual results via unname which gives me a matrix
fooTableAsMat <- unname(fooTable)
fooTableAsMat
[,1] [,2]
[1,] 1 1
[2,] 0 1
[3,] 1 0
#but the UID vec is hidden in the table structure *somewhere* and
# I can't work out how to reference it out
#coercing the result to a dataFrame doesn't work
as.data.frame(fooTable)
Var1 Var2 Freq
1 UidA FALSE 1
2 UidB FALSE 0
3 UidC FALSE 1
4 UidA TRUE 1
5 UidB TRUE 1
6 UidC TRUE 0
#I have also tried 'aggregate' but have not made friends with it
这有帮助吗
使用plyr
:
> ddply(foo, .(Uid), summarise, NWin = sum(Win), NRunUp = sum(!Win))
# Uid NWin NRunUp
# 1 UidA 1 1
# 2 UidB 1 0
# 3 UidC 0 1
难道你不能把它改成宽格式吗?或者这不是你想要的吗?也许这真的能满足我的要求。什么是宽格式?我在R帮助中找不到它。在重塑文档下间接找到了宽格式。但我似乎没有Reforme2,因为我在帮助中找不到它(也许我需要安装一个库?)。as.data.frame似乎实际上撤销了分析,因此我不确定它作为中间步骤是否有效,除非dcast以某种方式修改其操作。
fooTable
的行名可以通过rownames(fooTable)
访问。谢谢Sven!现在我有一个快速补丁。而且,从阿伦那里,我学到了一些新的东西,这意味着我将来不必修补它。(更少的转换=更少的出错空间和更多的思考空间。)是的!!我的问题的潜台词是,是否最好停止把头撞在墙上,转而学习plyr(或data.table)…;-)看来这个问题的答案是肯定的!