楼主: kaifengedu
6302 8

[问答] 奇妙的数据框操作 [推广有奖]

  • 0关注
  • 18粉丝

已卖:641份资源

学科带头人

4%

还不是VIP/贵宾

-

威望
0
论坛币
1671 个
通用积分
475.1680
学术水平
85 点
热心指数
128 点
信用等级
60 点
经验
32847 点
帖子
913
精华
0
在线时间
1638 小时
注册时间
2010-2-2
最后登录
2025-12-27

楼主
kaifengedu 发表于 2013-1-23 12:30:10 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
  1. teams <- c("PHI","NYM","FLA","ATL","WSN")
  2. w <- c(92, 89, 94, 72, 59)
  3. l <- c(70, 73, 77, 90, 102)
  4. nleast <- data.frame(teams,w,l)
  5. nleast
  6. nleast$l[nleast$teams=="FLA"]
复制代码

上述代码太正常了,可是您有没有想过:
  1. nleast[nleast$teams=="FLA"]$l
复制代码

的结果是什么?
结果是
[1]  70  73  77  90 102为什么不是77?
再试一下
  1. nleast[nleast$teams=="WSN"]$l
复制代码

结果
Error in `[.data.frame`(nleast, nleast$teams == "WSN") :   undefined columns selected再来一个
  1. nleast[c(0,0,1)]
复制代码

结果是
teams1   PHI2   NYM3   FLA4   ATL5   WSN
  1. nleast[c(0,0,4)]
复制代码

结果是Error in `[.data.frame`(nleast, c(0, 0, 4)) : undefined columns selected 各位朋友,来讨论一下.
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:数据框 Teams TEAM AMS eam

沙发
ntsean 发表于 2013-1-23 12:40:00
很简单,你少了个逗号
nleast[nleast$teams=="FLA", ]$l 就可以了

藤椅
xuweny87 发表于 2013-1-23 12:50:31
不是很懂~

板凳
kaifengedu 发表于 2013-1-23 12:51:36
ntsean 发表于 2013-1-23 12:40
很简单,你少了个逗号
nleast[nleast$teams=="FLA", ]$l 就可以了
多谢,我是故意少写一个逗号的,看看不写一个逗号为什么会出现这样的结果.

报纸
ntsean 发表于 2013-1-23 12:55:13
kaifengedu 发表于 2013-1-23 12:51
多谢,我是故意少写一个逗号的,看看不写一个逗号为什么会出现这样的结果.
那就当做vector了,似乎
这样 nleast$teams=="FLA" 因为长度不同会自动recycle,这样就会选出多个来
已有 1 人评分学术水平 热心指数 信用等级 收起 理由
kaifengedu + 1 + 1 + 1 鼓励积极发帖讨论

总评分: 学术水平 + 1  热心指数 + 1  信用等级 + 1   查看全部评分

地板
jmpamao 发表于 2013-1-23 13:30:06
我的理解是:定位 找行号 与列号
1、nleast$l[nleast$teams=="FLA"] 是先找得列nleast$l,此时数据变为了vector,可下标[c(F,T...)]或[c(1,2..)]
2、ntsean 写的 nleast[nleast$teams=="FLA", ]$l 是先找到是行 nleast[nleast$steams=="FLA",], 此时数据仍为data.frame, 非vector(有逗号的),再$l,定位。

nleast[nleast$teams=="FLA"]$l中,nleast[nleast$teams=="FLA"]找的是 列,数据仍为 data.frame,
但是:nleast  只有3个列, 那么c(F,F,T, 后面都是F), 是能够有结果, 但c(F,F,F,  后面有T的话)就超出了这个nelast 列范围了,就出错了。


nleast[c(0,0,1)]  是找到列1,
  下标为0,就是空的
nleast 列的下标为 1,2,3  超出这个范围是不行的

已有 1 人评分学术水平 热心指数 信用等级 收起 理由
kaifengedu + 1 + 1 + 1 我很赞同

总评分: 学术水平 + 1  热心指数 + 1  信用等级 + 1   查看全部评分

7
jmpamao 发表于 2013-1-23 13:47:52
kaifengedu 发表于 2013-1-23 12:51
多谢,我是故意少写一个逗号的,看看不写一个逗号为什么会出现这样的结果.
官方貌似是不赞成这样的写法

8
kaifengedu 发表于 2013-1-23 14:32:30
jmpamao 发表于 2013-1-23 13:30
我的理解是:定位 找行号 与列号
1、nleast$l[nleast$teams=="FLA"] 是先找得列nleast$l,此时数据变为了v ...
我在发这个问题时也看了半天,基本和你的理解一样,多谢!

9
幸运的小p超 发表于 2015-8-24 15:32:08
jmpamao 发表于 2013-1-23 13:30
我的理解是:定位 找行号 与列号
1、nleast$l[nleast$teams=="FLA"] 是先找得列nleast$l,此时数据变为了v ...
这是乱码了吗?中间的l是怎么回事

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2026-1-3 14:36