小编nhe*_*121的帖子

在data.table中按行递减顺序对data.table中的行进行排序`order(-x,v)`在data.table 1.9.4或更早版本上给出错误

比方说,我有以下data.tableR:

  library(data.table)
  DT = data.table(x=rep(c("b","a","c"),each=3), y=c(1,3,6), v=1:9)
Run Code Online (Sandbox Code Playgroud)

我想通过两列(比如列xv)来订购它.我用过这个:

 DT[order(x,v)] # sorts first by x then by v (both in ascending order)
Run Code Online (Sandbox Code Playgroud)

但现在,我想按x顺序排序(按递减顺序)并具有以下代码:

  DT[order(-x)] #Error in -x : invalid argument to unary operator
Run Code Online (Sandbox Code Playgroud)

因此,我认为这个错误是由于这个事实class(DT$x)=character.你可以给我任何建议来解决这个问题吗?

我知道我可以使用DT[order(x,decreasing=TRUE)],但我想知道使用两种方式(有些减少,有些增加)同时按几列排序的语法.

请注意,如果您使用DT[order(-y,v)]结果是正常的,但如果使用DT[order(-x,v)]则存在错误.所以,我的问题是:如何解决这个错误?

sorting string r key data.table

119
推荐指数
3
解决办法
16万
查看次数

如何自动加载R中的包?

你能建议我自动在R中加载包裹的方法吗?我的意思是,我想在R中开始一个会话,而不需要library('package name')多次使用.假设我下次启动R时下载了我想要使用的所有软件包.

r loading defaults r-faq r-package

55
推荐指数
4
解决办法
5万
查看次数

选择data.table中的列子集

我想打印数据表的所有列,dt除了其中一个已命名V3但不想按编号而是按名称引用它.这是我的代码:

  dt = data.table(matrix(sample(c(0,1),5,rep=T),50,10))
  dt[,-3,with=FALSE]   #  Is this the only way to not print column "V3"? 
Run Code Online (Sandbox Code Playgroud)

使用这种data frame方式,可以通过代码执行此操作:

  df = data.frame(matrix(sample(c(0,1),5,rep=T),50,10))
  df[,!(colnames(df)%in% c("X3"))]
Run Code Online (Sandbox Code Playgroud)

所以,我的问题是:是否有另一种方法不在数据表中打印一列而不必按编号引用它?我想找到类似于我上面使用的数据帧语法但使用数据表的东西.

r data.table

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

如何用R删除字符串中重复的字符?

我想实现一个R删除字符串中重复字符的函数.例如,假设我的函数已命名removeRS,因此它应该以这种方式工作:

  removeRS('Buenaaaaaaaaa Suerrrrte')
  Buena Suerte
  removeRS('Hoy estoy tristeeeeeee')
  Hoy estoy triste
Run Code Online (Sandbox Code Playgroud)

我的函数将用于用西班牙语编写的字符串,因此找到具有三个以上连续元音的单词并不常见(或至少是正确的).不用担心他们背后可能存在的情绪.尽管如此,有些单词可以有两个连续的辅音(特别是ll和rr),但我们可以从我们的函数中跳过这个.

因此,总而言之,此函数应该替换仅与该字母连续出现至少三次的字母.在上面的一个例子中,aaaaaaaaa被替换为a.

你可以给我任何提示来执行这项任务R吗?

string r

17
推荐指数
2
解决办法
7467
查看次数

高级堆积条形图ggplot2

说我有数据框:

 df<-structure(list(predworker = c(1, 1, 1, 1, 1, 3, 3, 3, 3, 3, 4, 
                 4, 4, 4, 4, 5, 5, 5, 5, 5, 6, 6, 6, 6, 6, 7, 7, 7, 7, 7, 8, 8, 
                          8, 8, 8, 9, 9, 9, 9, 9, 10, 10, 10, 10, 10, 
11, 11, 11, 11, 11
), worker = c(1, 14, 11, 19, 13, 23, 3, 15, 20, 6, 15, 3, 5, 
          4, 22, 5, 21, 11, 14, 4, 15, 23, 6, 20, …
Run Code Online (Sandbox Code Playgroud)

r bar-chart ggplot2

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

R中给定函数的包的名称

可能重复:
您如何确定函数的命名空间?

我不知道怎么做...你怎么知道R中某个函数的包名?我想有一个给定函数名称的函数,返回拥有它的包的名称.有什么建议吗?

r

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

您如何将其转换为R中的data.table包语言?

我正在努力学习data.table包装R.我有一个名为数据表DT1和数据框DF1,我想根据逻辑条件(disjunction)对一些实例进行子集化.这是我现在的代码:

DF1[DF1$c1==0 | DF1$c2==1,] #the data.frame way with the data.frame DF1
DT1[DT1$c1==0 | DT1$c2==1,] #the data.frame way with the data.table DT1
Run Code Online (Sandbox Code Playgroud)

在第5页"介绍data.table包R",笔者给出的相似,但有一起选择(取代的东西的例子|通过&在第二线以上)和言论,这是一个不好用的data.table包.他建议这样做:

setkey(DT1,c1,c2)
DT1[J(0,1)]
Run Code Online (Sandbox Code Playgroud)

所以,我的问题是:如何用data.table包语法编写析取条件?这是我的第二行滥用DT1[DT1$c1==0 | DT1$c2==1,]吗?有没有相当于J但是为了分离?

r data.table

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

箱图中的颜色异常值是多个因素

假设我有以下数据框:

library(ggplot2)

set.seed(101)
n=10
df<- data.frame(delta=rep(rep(c(0.1,0.2,0.3),each=3),n), metric=rep(rep(c('P','R','C'),3),n),value=rnorm(9*n, 0.0, 1.0))
Run Code Online (Sandbox Code Playgroud)

我的目标是通过多种因素做一个箱形图:

p<- ggplot(data = df, aes(x = factor(delta), y = value)) + 
geom_boxplot(aes(fill=factor(metric)))
Run Code Online (Sandbox Code Playgroud)

输出是:

在此输入图像描述

到目前为止一切都很好,但如果我这样做:

p+ geom_point(aes(color = factor(metric))) 
Run Code Online (Sandbox Code Playgroud)

我明白了:

在此输入图像描述

我不知道它在做什么.我的目标是在这里完成异常值的着色.请注意,此解决方案将框的内部颜色更改为白色,并将边框设置为不同的颜色.我希望保持相同颜色的盒子,同时让异常值继承这些颜色.我想知道如何使异常值从各自的箱形图中获得相同的颜色.

r ggplot2 boxplot

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

数据表中的逐个元素乘法 - 同时有多个变量(R)

假设我有以下数据表R:

L3 <- LETTERS[1:3]
(d <- data.table(cbind(x = 1, y = 1:10), fac = sample(L3, 10, replace = TRUE)))
vecfx=c(5.3,2.8)
Run Code Online (Sandbox Code Playgroud)

我想计算两个新的变量,dot1dot2具有以下特点:

d[,dot1:=5.3*x]
d[,dot2:=2.8*y] 
Run Code Online (Sandbox Code Playgroud)

但我不想以这种方式计算它们,因为这是我的问题的放松.在我原来的问题中,vecfx由12个元素组成,我的数据表有twuelve列,所以我想避免写两次.

我试过这个:vecfx*d[,list(x,y)]但是我没有得到理想的结果(似乎产品是由行而不是列完成的).另外,我想在我的数据表中创建这两个新变量d.

当想要在数据表中同时创建多个列时,这也很有用R.

任何帮助表示赞赏.

r data.table

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

在X轴刻度上添加乳胶表达式@ ggplot2

我有这个数据框:

library(ggplot2)
library('latex2exp')

dfvi<-structure(list(rel.imp = c(7.97309042736285, 3.68859054679465, 
-0.672404901177933, -0.56914400358685, 0.461768686793877,-0.393707520847751, 
0.331273538653149, 0.257999910761084, -0.226891321033094, 0.179124365066449
), x.names = c("a", "x", "d", "ft", "ew", "qw", "ccc", "sas", 
"imb", "msf")), row.names = c(NA, -10L), .Names = c("rel.imp", 
"x.names"), class = "data.frame")
Run Code Online (Sandbox Code Playgroud)

我使用以下方法进行绘制ggplot2

ggplot(dfvi, aes(x=x.names, y=rel.imp)) +
geom_segment( aes(x=x.names, xend=x.names, y=0, yend=rel.imp),color="grey") +
geom_point( color="orange", size=4) +
scale_y_continuous(breaks=c(-1,seq(0,8,2)))+
scale_x_discrete(labels=c('a'='a','x'='x','d'=TeX('$mode(L_{ij})$'),'ft'=expression('$R_{ij}$'),'ew'=TeX('$Q_{ij}$'),'qw'='qw','ccc'='ccc','sas'='sas','imb'='imb','msf'='msfff'))+
theme_light() + 
theme(
axis.text.x = element_text(angle=90,hjust=1),
panel.grid.major.x = element_blank(),
panel.border = element_blank(),
axis.ticks.x = element_blank()) 
+ xlab("X label") +  ylab("Y label")
Run Code Online (Sandbox Code Playgroud)


这给了我们:

在此处输入图片说明

我想在x轴刻度上使用一些数学符号(例如$ …

plot latex r ggplot2

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

获取所有类型的账户 Android API 29

我是 android 新手,试图获取 android 用户在他/她的设备中注册的帐户列表。我使用 android 的帐户管理器来执行此操作,如下所示:

public static int count;
count=0;
JSONArray jsonArr = new JSONArray();
JSONObject emailObj = new JSONObject();
Account[] accounts = AccountManager.get(mContext).getAccounts();
        //Account[] accounts = AccountManager.get(mContext).getAccountsByType(null);
        for (Account account : accounts) {
            //possibleEmail += " "+account.name+" : "+account.type+" \n";

            JSONObject elem = new JSONObject();
            elem.put("name", account.name);
            elem.put("type", account.type);
            jsonArr.put(elem);
            //possibleEmail += " "+account.name+" \n";
            count++;
            emailObj.put("list",jsonArr);

        }
Run Code Online (Sandbox Code Playgroud)

例如,上面的代码可以按照 API 级别 23 的要求工作。我得到的帐户列表如下:

[{"name":"agmailaccount@gmail.com","type":"com.google"},{"name":"agmailaccount2@gmail.com","type":"com.google"},{"name":"agmailaccount3@gmail.com","type":"com.google"},{"name":"handler","type":"com.twitter.android.auth.login"},{"name":"Facebook","type":"com.facebook.auth.login"},{"name":"LinkedIn","type":"com.linkedin.android"}]
Run Code Online (Sandbox Code Playgroud)

请注意,我可以检测用户是否登录了第三方应用程序。我确实安装了 linkedin、fb 和 twitter,并且我从我的设备登录了这些平台。我只需要捕获此信息(如上面的列表所示),而不是实际的帐户名称。

关键是,当我对 Android API 级别 29 使用相同的代码时,它不会返回com.twitter.android.auth.logincom.facebook.auth.login …

account android accountmanager

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

Pandas DataFrame Python 中的分组依据

我是 Pandas 新手,我想知道在下面的示例中我做错了什么。

我在这里找到了一个示例,解释了如何在应用组而不是系列后获取数据框。

df1 = pd.DataFrame( { 
"Name" : ["Alice", "Bob", "Mallory", "Mallory", "Bob" , "Mallory"] , 
"City" : ["Seattle", "Seattle", "Baires", "Caracas", "Baires", "Caracas"] })

df1['size'] = df1.groupby(['City']).transform(np.size)

df1.dtypes #Why is size an object? shouldn't it be an integer?

df1[['size']] = df1[['size']].astype(int) #convert to integer

df1['avera'] = df1.groupby(['City'])['size'].transform(np.mean) #group by again
Run Code Online (Sandbox Code Playgroud)

基本上,我想将相同的转换应用于我现在正在处理的巨大数据集,但我收到一条错误消息:

budgetbid['meanpb']=budgetbid.groupby(['jobid'])['probudget'].transform(np.mean) #can't upload this data for the sake of explanation

ValueError: Length mismatch: Expected axis has 5564 elements, new values have 78421 elements
Run Code Online (Sandbox Code Playgroud)

因此,我的问题是:

  1. 我怎样才能克服这个错误? …

python dataframe pandas

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

怀疑R中的ddply函数

我正在尝试通过名为的函数进行等效的group by摘要.我有一个数据框,有三列(比方说,和).然后,我想计算每个出现在数据框中的时间(带)并获取每个对应于列的最后一个元素.Rplyrddplyidperiodeventidcount(*)... group by idSQLidevent

这是我拥有的和我想要获得的内容的一个例子:

  id period event #original data frame
  1      1     1
  2      1     0
  2      2     1
  3      1     1
  4      1     1
  4      1     0

  id  t  x #what I want to obtain
  1   1  1
  2   2  1
  3   1  1
  4   2  0
Run Code Online (Sandbox Code Playgroud)

这是我用过的简单代码:

 teachers.pp<-read.table("http://www.ats.ucla.edu/stat/examples/alda/teachers_pp.csv", sep=",", header=T) # whole data frame
 datos=ddply(teachers.pp,.(id),function(x) c(t=length(x$id), x=x[length(x$id),3])) #This is working fine.
Run Code Online (Sandbox Code Playgroud)

现在,我一直在阅读用于数据分析的Split-Apply-Combine策略, …

r plyr

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