小编Thi*_*nis的帖子

R:ifelse函数返回向量位置而不是值(字符串)

关于ifelse函数,我有一个非常奇怪的问题:它不会返回一个因子(我想要的),而是像因子的位置一样.

我使用的数据集可以在这里下载.

我想要的是

..在df中创建一个新列,其中包含国家/地区的名称,如果该国家/地区属于前12个最常见的国家/地区(在"答案"列中).否则它应该包含"其他"

我做了什么

......是

  • 使用as.data.frame(summary .. etc)##创建一个包含最常用国家/地区名称的列表
  • 该函数的TRUE部分使用%in%##将df $ col值与此列表匹配
  • 如果TRUE应该是其中的因子(国家名称),则返回值

然而

... R返回一些非常奇怪的东西:它返回前10个国家的因子级别(1到181之间)的位置,以及其他国家的"其他"(这是正常的).这一行返回错误的值:

        aDDs$answer, ## then it should be named as aDDs$answer **THIS IS THE PROBLEM**
Run Code Online (Sandbox Code Playgroud)

我用过的代码:

## create a list with most frequent country names
temp <- row.names(as.data.frame(summary(aDDs$answer, max=12))) # create a df or something else with the summary output.
colnames(temp)[1]="freq"
"India" %in% temp #check if it works (yes)

## create new column that filters top results
aDDs$top <- ifelse(
        aDDs$answer %in% temp, ## …
Run Code Online (Sandbox Code Playgroud)

if-statement r

10
推荐指数
1
解决办法
1万
查看次数

如何基于前N个频繁出现的变量来对长数据帧进行子集化

我的目标是创建一个长数据框的简单密度或条形图,显示课程中国籍的相对频率(MOOC).我只是不想要那里的所有国籍,只有前10名.我创建了这个例子df下面+我用于绘图的ggplot2代码.

d=data.frame(course=sample(LETTERS[1:5], 500,replace=T),nationality=as.factor(sample(1:172,500,replace=T)))
mm <- ggplot(d, aes(x=nationality, colour=factor(course)))
mm + geom_bar() + theme_classic()
Run Code Online (Sandbox Code Playgroud)

......但是如上所述:我想要基于频率的整个数据集的子集.以上显示了所有数据.

PS.我为上下文添加了ggplot2代码,但也因为ggplot2本身可能有一些东西可以使这成为可能(我怀疑它).

编辑2014-12-11: 当前的答案使用ddplyr或表方法来达到所需的子集,但我想知道是否有更直接的方法来实现相同的...我会让它留下来,看看是否有是其他方式.

r subset ggplot2

4
推荐指数
2
解决办法
4192
查看次数

如何删除GMail标签 - Google Apps脚本

我想从收件箱中放回的每封邮件中删除标签"Followup".我尝试过几件事,但仍然没有成功.我希望有人可以帮助我或指出我正确的方向.有关的职能是:

function moveToInbox(page) {
  GmailApp.moveThreadsToInbox(page);
//  GmailApp.markThreadsUnread(page);
//  GmailApp.starMessages(page)
  var label = GmailApp.getUserLabelByName("FollowUp");
  var firstThread = GmailApp.getInboxThreads(0,1)[0];
  var coupleOfMessages = firstThread.getMessages().slice(0, 10);
  GmailApp.starMessages(coupleOfMessages);
  label.removeFromThread(firstThread);
}
Run Code Online (Sandbox Code Playgroud)

整个脚本是:

function getLabelName(i, labelSuffixString) {
  return "FollowUp/" + i + labelSuffixString;
}

function setup() {
  for (var i = 1; i <= 7; ++i) {
    GmailApp.createLabel(getLabelName(i, "days"));
    GmailApp.createLabel(getLabelName(i, "weeks"));
  }
  GmailApp.createLabel("FollowUp");
}

function moveToInbox(page) {
  GmailApp.moveThreadsToInbox(page);
//  GmailApp.markThreadsUnread(page);
//  GmailApp.starMessages(page)
  var label = GmailApp.getUserLabelByName("FollowUp");
  var firstThread = GmailApp.getInboxThreads(0,1)[0];
  var coupleOfMessages = firstThread.getMessages().slice(0, 10);
  GmailApp.starMessages(coupleOfMessages);
  label.removeFromThread(firstThread); …
Run Code Online (Sandbox Code Playgroud)

gmail google-api google-apps-script

3
推荐指数
1
解决办法
5330
查看次数

不同的输出格式摘要(X $ Y)与摘要(X)

我是R的初学者,但我知道在这里提问之前我应该​​寻找答案.我做了,查看了帮助文件,但无济于事.问题如下:当我要求提供子集X的摘要时,两列的输出如下所示.我想只有答案的输出,我能够,但它的呈现方式不同(见底部的输出).我希望将结果显示为表格,而不是列表.

summary(X, max = 12)
Run Code Online (Sandbox Code Playgroud)

结果是:

student            answer    


 Min.   :    335   0 - Not at all likely                                                                 :  35  
 1st Qu.: 855480   1                                                                                     :  18  
 Median :1831962   10 - Extremely likely                                                                 :9336  
 Mean   :1519041   2                                                                                     :  23  
 3rd Qu.:2183663   3                                                                                     :  19  
 Max.   :2607132   4                                                                                     :  15  
                   5 - Neutral                                                                           : 939  
                   6                                                                                     : 235  
                   7                                                                                     : 921  
                   8                                                                                     :1844  
                   9                                                                                     :1194  
                   option_i4x-DelftX-ET3034TUx-problem-b3d30df864ca41ffa0170e790f01a783_2_1_dummy_default:  71
Run Code Online (Sandbox Code Playgroud)

因为我只对答案的摘要统计感兴趣,所以我用过

summary(X$answer, max = 12)
Run Code Online (Sandbox Code Playgroud)

然后我将下面的列表作为答案.

                                                             0 - Not at all likely 
                                                                                35 
                                                                                 1 
                                                                                18 …
Run Code Online (Sandbox Code Playgroud)

r summary

3
推荐指数
1
解决办法
129
查看次数

R:重命名或复制数据帧并按向量中的定义命名

我想从现有数据框创建一个新的数据框,并按向量中的定义命名:

我有一个包含许多不同问题的数据集,为了更快地浏览数据集,我开发了一个可以调用的泛型函数列表.对于每个问题,我定义了具体的值,如下所示.在第二部分中,我或多或少地为问题创建了一个干净的数据集,该数据集被保存为名为"questionid"的数据框.因为每个问题都会覆盖该变量,所以我想创建此数据帧的副本,并按照'questionname'(在本例中为"A1")中的指定调用它.我发现很难找到简单的方法来做到这一点.我希望有一个人可以帮助我.

# Specify vectors and variables
  question <- "Would you recommend edX to a friend of you?" 
  questionname <- "A1" 
  edXid <- "i4x-DelftX-ET3034TUx-problem-b3d30df864ca41ffa0170e790f01a783_2_1" 
  clevels <- c("0 - Not at all likely", "1", "2", "3", "4", "5 - Neutral", "6", "7", "8", "9", "10 - Extremely likely") 
  csvname <- paste(questionname, ".csv", sep="") 
  pngname <- paste(questionname, ".png", sep="") 

# Run code
  questionid <- subset(allDatasolar, allDatasolar[,3]==edXid, select = -c(X,question))
  questionid <- questionid[-grep("dummy", questionid$answer), ] 
  questionid <- droplevels(questionid) 
  # …
Run Code Online (Sandbox Code Playgroud)

r rename

2
推荐指数
1
解决办法
7464
查看次数

如何在R中返回每组nrow?

这可能是一个非常基本的问题......我有一个简单的数据框,每个课程有不同的观察结果.我希望R每个课程返回行数(在我的情况下等于观察数).

例如:

DF <- structure(list(age = c(36, 21, 20, 32, 24), course = c("AERO", 
"AERO", "CREDIT", "CREDIT", "SOLAR")), .Names = c("age", "course"), class = "data.frame", row.names = c(NA, 
-5L))
Run Code Online (Sandbox Code Playgroud)

然后我想要有类似的东西

nrow(DF, by=course)

..返回每个课程的行数.我知道那nrow(DF, by=course)不存在,但还有什么吗?

我使用了子集,但后来我必须定义每个子集.

r

2
推荐指数
3
解决办法
3821
查看次数

cex.axis 只影响 y 轴,不影响 x 轴

我在子集 A1 中绘制了因子变量“answer”的图。我想减小两个轴上的文本大小,以适应 x 轴上的两个极值。但是,使用 cex.axis 时,仅影响 y 标签上的字体大小,而不影响x 轴上的字体大小。为什么会这样,我该如何改变?

我使用的功能是:

plot(A1$answer, main = "Would you recommend edX to a friend of you?", xlab = "Answer", ylab = "#students", col='lightblue', cex.axis=0.75, font=3, family='mono'); box(col='lightblue');
Run Code Online (Sandbox Code Playgroud)

这是输出:

edX推荐

plot r

1
推荐指数
1
解决办法
2287
查看次数