假设我创建了以下矩阵:
> x <- matrix(1:20000,nrow=100)
> x[1:10,1:10]
[,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
[1,] 1 101 201 301 401 501 601 701 801 901
[2,] 2 102 202 302 402 502 602 702 802 902
[3,] 3 103 203 303 403 503 603 703 803 903
[4,] 4 104 204 304 404 504 604 704 804 904
[5,] 5 105 205 305 405 505 605 705 805 905
[6,] 6 106 206 306 406 506 606 …Run Code Online (Sandbox Code Playgroud) 有没有办法将变量的值赋给plyr中的结果列名?所以在这段代码中......
column_name <- 'total'
df <- data.frame(a=c('a','b'), b=c(1,2))
ddply(df, .(a), summarise, column_name=sum(b))
Run Code Online (Sandbox Code Playgroud)
如您所知,这会吐出一个由变量a和数据组成的数据框column_name.不过,我想这是变量a和total,其中total由一个变量的值动态分配的,因为实际上,我要处理它在循环中,我不能直接指定它ddply函数内.
对于您的信息,此代码不起作用.
ddply(df, .(a), summarise, get(column_name)=sum(b))
Run Code Online (Sandbox Code Playgroud)
那么有没有解决方案呢?
我有一个包含各种列的数据框sender_bank_flag.我在我的数据框上运行了以下两个查询.
sum(s_50k_sample$sender_bank_flag, na.rm=TRUE)
sum(s_50k_sample$sender_bank, na.rm=TRUE)
即使sender_bank我的数据框中没有这样的列,我从两个查询中获得了相同的输出.我希望第二个代码出错.不知道R有这样的功能!有谁知道这个功能究竟是什么?如何更好地利用它?
MySQL 中列名的最大长度为 64(您可以查看文档)。我的问题是我该如何改变它。更具体地说,我想增加它。可以做到吗?如果是,应该怎么做?
编辑:关于动机的几句话:这些表格是在输入字符串时自动创建的,不需要可读,因为它们正在被软件使用。另一种方法是提供一些“id”作为列名而不是输入字符串连接。但是增加列名长度可以解决它而无需任何代码更改。
谢谢,
利奥尔
我有表格,包含以下信息:
CREATE TABLE [dbo].[ApprovedPalmsInFarm](
[id] [int] IDENTITY(1,1) NOT NULL,
[FarmID] [nvarchar](10) NOT NULL,
[kalas] [int] NULL,
[khnizi] [int] NULL
Run Code Online (Sandbox Code Playgroud)
select查询的默认结果是:
id FarmID kalas khnizi
4 12100462 5 0
5 11520344 3 0
6 12104277 150 15
Run Code Online (Sandbox Code Playgroud)
我想使用Unpivot查询生成报告,其中列成为行值
我的报告查询如下:
SELECT FarmID, PalmsName, Quantity
FROM [ApprovedPalmsInFarm]
unpivot
(
Quantity
FOR PalmsName in ([kalas] , [khnizi] )
) u;
Run Code Online (Sandbox Code Playgroud)
我的Unpivot查询的结果如下:
FarmID PalmsName Quantity
12100462 kalas 5
12100462 khnizi 0
11520344 kalas 3
11520344 khnizi 0
12104277 kalas 150
12104277 khnizi 15
Run Code Online (Sandbox Code Playgroud)
现在我的问题是,如何在不可理解的情况下更改PalmsName的值的名称,并且它们是列的名称,因此我想将名称更改为例如阿拉伯语,如下所示:
خلاص而不是kalas …
我正在尝试使用Pandas来表示运动捕获数据,该数据具有对N个标记的每个(x,y,z)位置的T测量。例如,在T = 3和N = 4的情况下,原始CSV数据如下所示:
T,Ax,Ay,Az,Bx,By,Bz,Cx,Cy,Cz,Dx,Dy,Dz
0,1,2,1,3,2,1,4,2,1,5,2,1
1,8,2,3,3,2,9,9,1,3,4,9,1
2,4,5,7,7,7,1,8,3,6,9,2,3
Run Code Online (Sandbox Code Playgroud)
这真的很容易加载到DataFrame中,并且我学到了一些简单的技巧(例如,将标记数据转换为z分数或计算速度)。
不过,我想做的一件事是将上面显示的“平面”数据转换为一种在列(标记)上具有层次结构索引的格式,以便在级别0处有N列(每个标记一个) ),那么其中的每一个在级别1上都会有3列(x,y和z分别为1个)。
A B C D
x y z x y z x y z x y z
0 1 2 1 3 2 1 4 2 1 5 2 1
1 8 2 3 3 2 9 9 1 3 4 9 1
2 4 5 7 7 7 1 8 3 6 9 2 3
Run Code Online (Sandbox Code Playgroud)
我知道如何加载平面文件,然后直接操作Series对象,也许通过使用append手动创建的MultiIndex或仅使用新创建的DataFrame来实现。
作为熊猫的学习者,感觉必须有一种方法可以轻松完成此任务,但是很难发现。有没有更简单的方法?
以下面的例子为例.
library(dplyr)
temp <- data.frame(lapply(1:3, function(i) rnorm(5, 0, 1)))
names(temp) <- paste0("X", 1:3)
temp_each <-
temp %>%
mutate_each(funs(mean, median))
Run Code Online (Sandbox Code Playgroud)
检查名称temp_each,我们看到了
> names(temp_each)
[1] "X1" "X2" "X3" "X1_mean" "X2_mean" "X3_mean" "X1_median" "X2_median" "X3_median"
Run Code Online (Sandbox Code Playgroud)
也就是说,最终列是三个一组,总是嘱咐 X1,X2,X3+应用的功能.
但是,我希望它看起来像这样
[1] "X1" "X1_mean" "X1_median" "X2" "X2_mean" "X2_median" "X3" "X3_mean" "X3_median"
Run Code Online (Sandbox Code Playgroud)
有没有人知道如何实现这一点,最好使用dplyr,对于具有许多列和任意列名称的数据框?
可能重复:
R中的赋值运算符:'='和'< - '
我想知道为什么使用=和<-分配a时有区别dataframe.
案例a:使用 =
set.seed(100);a <- data.frame(a1=rnorm(10),a2=sample(c(1,0),10,replace=TRUE))
Run Code Online (Sandbox Code Playgroud)
案例b:使用 <-
set.seed(100);b <- data.frame(b1 <- rnorm(10),b2 <- sample(c(1,0),10,replace=TRUE))
Run Code Online (Sandbox Code Playgroud)
为什么会有以下区别?为什么第二种方法没有保留变量/列名?
> a
a1 a2
1 -0.50219235 0
2 0.13153117 0
3 -0.07891709 1
4 0.88678481 1
5 0.11697127 0
>b
b1....rnorm.5. b2....sample.c.1..0...5..replace...TRUE.
1 -0.50219235 0
2 0.13153117 0
3 -0.07891709 1
4 0.88678481 1
5 0.11697127 0
Run Code Online (Sandbox Code Playgroud) 使用Hive我想在csv文件中获取查询结果,我也想得到标题.
为了达到这个目的,我正在执行:
hive -e '
use database;
set hive.cli.print.header=true;
select * from table;
' > /home/centos/user/result.csv
Run Code Online (Sandbox Code Playgroud)
但是csv的第一行是:
table.field1_name,table.field2_name,table.field3_name
Run Code Online (Sandbox Code Playgroud)
我怎样才能获得内容:
field1_name,field2_name,field3_name
Run Code Online (Sandbox Code Playgroud) 我正在努力理解列命名约定背后的概念,因为以下创建新列的尝试之一似乎失败了:
from numpy.random import randn
import pandas as pd
df = pd.DataFrame({'a':range(0,10,2), 'c':range(0,1000,200)},
columns=list('ac'))
df['b'] = 10*df.a
df
Run Code Online (Sandbox Code Playgroud)
给出以下结果:
然而,如果我试图通过替换以下行来创建列b,则没有错误消息,但数据帧df仅保留列a和c.
df.b = 10*df.a ### rather than the previous df['b'] = 10*df.a ###
Run Code Online (Sandbox Code Playgroud)
大熊猫做了什么,为什么我的命令不正确?