比方说,我有以下data.table
的R
:
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)
我想通过两列(比如列x
和v
)来订购它.我用过这个:
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)]
则存在错误.所以,我的问题是:如何解决这个错误?
你能建议我自动在R中加载包裹的方法吗?我的意思是,我想在R中开始一个会话,而不需要library('package name')
多次使用.假设我下次启动R时下载了我想要使用的所有软件包.
我想打印数据表的所有列,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
删除字符串中重复字符的函数.例如,假设我的函数已命名removeRS
,因此它应该以这种方式工作:
removeRS('Buenaaaaaaaaa Suerrrrte')
Buena Suerte
removeRS('Hoy estoy tristeeeeeee')
Hoy estoy triste
Run Code Online (Sandbox Code Playgroud)
我的函数将用于用西班牙语编写的字符串,因此找到具有三个以上连续元音的单词并不常见(或至少是正确的).不用担心他们背后可能存在的情绪.尽管如此,有些单词可以有两个连续的辅音(特别是ll和rr),但我们可以从我们的函数中跳过这个.
因此,总而言之,此函数应该替换仅与该字母连续出现至少三次的字母.在上面的一个例子中,aaaaaaaaa
被替换为a
.
你可以给我任何提示来执行这项任务R
吗?
说我有数据框:
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中某个函数的包名?我想有一个给定函数名称的函数,返回拥有它的包的名称.有什么建议吗?
我正在努力学习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
但是为了分离?
假设我有以下数据框:
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
:
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)
我想计算两个新的变量,dot1
并dot2
具有以下特点:
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
.
任何帮助表示赞赏.
我有这个数据框:
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轴刻度上使用一些数学符号(例如$ …
我是 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.login
、com.facebook.auth.login …
我是 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)
因此,我的问题是:
我正在尝试通过名为的函数进行等效的group by
摘要.我有一个数据框,有三列(比方说,和).然后,我想计算每个出现在数据框中的时间(带)并获取每个对应于列的最后一个元素.R
plyr
ddply
id
period
event
id
count(*)... group by id
SQL
id
event
这是我拥有的和我想要获得的内容的一个例子:
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策略, …