楼主: kaifengedu
6122 22

[问答] 请教list或者data.frame里增加新的变量问题. [推广有奖]

  • 0关注
  • 18粉丝

学科带头人

0%

还不是VIP/贵宾

-

威望
0
论坛币
1714 个
通用积分
473.0671
学术水平
85 点
热心指数
128 点
信用等级
60 点
经验
32592 点
帖子
896
精华
0
在线时间
1595 小时
注册时间
2010-2-2
最后登录
2024-4-23

相似文件 换一批

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
Owls.txt (22.38 KB)
附件是R语言初学者指南里的一个数据集文件.
我采用以下命令
  1. Owls <- read.table(file = "Owls.txt", header = TRUE, dec = ".")
  2. names(Owls)
  3. str(Owls)
  4. ifelse(Owls$FoodTreatment == "Satiated", Owls$NestNight <- paste(Owls$Nest, "1",sep = "_"),
  5.        Owls$NestNight <- paste(Owls$Nest, "2",sep = "_"))
  6. head(Owls)  
复制代码

出来的结果是
  
  1.   Nest FoodTreatment SexParent ArrivalTime
  2. 1 AutavauxTV      Deprived      Male       22.25
  3. 2 AutavauxTV      Satiated      Male       22.38
  4. 3 AutavauxTV      Deprived      Male       22.53
  5. 4 AutavauxTV      Deprived      Male       22.56
  6. 5 AutavauxTV      Deprived      Male       22.61
  7. 6 AutavauxTV      Deprived      Male       22.65
  8.   SiblingNegotiation BroodSize NegPerChick    NestNight
  9. 1                  4         5         0.8 AutavauxTV_2
  10. 2                  0         5         0.0 AutavauxTV_2
  11. 3                  2         5         0.4 AutavauxTV_2
  12. 4                  2         5         0.4 AutavauxTV_2
  13. 5                  2         5         0.4 AutavauxTV_2
  14. 6                  2         5         0.4 AutavauxTV_2
复制代码

如果用命令
  1. Owls$NestNight <- paste(Owls$Nest, Owls$FoodTreatment,sep = "_")
复制代码


然后再用head(Owls)就得到了
  1.    Nest FoodTreatment SexParent ArrivalTime
  2. 1 AutavauxTV      Deprived      Male       22.25
  3. 2 AutavauxTV      Satiated      Male       22.38
  4. 3 AutavauxTV      Deprived      Male       22.53
  5. 4 AutavauxTV      Deprived      Male       22.56
  6. 5 AutavauxTV      Deprived      Male       22.61
  7. 6 AutavauxTV      Deprived      Male       22.65
  8.   SiblingNegotiation BroodSize NegPerChick           NestNight
  9. 1                  4         5         0.8 AutavauxTV_Deprived
  10. 2                  0         5         0.0 AutavauxTV_Satiated
  11. 3                  2         5         0.4 AutavauxTV_Deprived
  12. 4                  2         5         0.4 AutavauxTV_Deprived
  13. 5                  2         5         0.4 AutavauxTV_Deprived
  14. 6                  2         5         0.4 AutavauxTV_Deprived


  15. 请问是不是这里我的ifelse语句用法有问题,谢谢!

  16. 另外一个问题,这里导入的Owls是list还是data.frame呢?怎么用is.list(Owls)出来的结果是TRUE,用is.data.frame(Owls)出来的结果也是TRUE.
复制代码
二维码

扫码加我 拉你入群

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

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

关键词:Frame list Fram Data IST 初学者 names file

沙发
kaifengedu 发表于 2013-1-16 09:42:32 |只看作者 |坛友微信交流群
吐槽一下,貌似排版很难排啊,呵呵.

使用道具

藤椅
qoiqpwqr 发表于 2013-1-16 10:49:52 |只看作者 |坛友微信交流群
没有问题啊。

你想得到什么样的结果?

使用道具

板凳
qoiqpwqr 发表于 2013-1-16 10:55:00 |只看作者 |坛友微信交流群
data frame 其实也是一种list,你可以Owls[[1]]就是第一列

使用道具

报纸
kaifengedu 发表于 2013-1-16 11:10:08 |只看作者 |坛友微信交流群
qoiqpwqr 发表于 2013-1-16 10:55
data frame 其实也是一种list,你可以Owls[[1]]就是第一列
谢谢版主,
我主要的问题是根据ifelse语句应该得到head(Owls)输出的第二行NestNight的值为AutavauxTV_1,但是给的输出确是AutavauxTV_2.这是为什么?

使用道具

地板
qoiqpwqr 发表于 2013-1-16 11:52:03 |只看作者 |坛友微信交流群
Owls$NestNight <- paste(Owls$Nest, ifelse(Owls$FoodTreatment == "Satiated", 1, 2), sep = "_")

使用道具

7
kaifengedu 发表于 2013-1-16 13:09:03 |只看作者 |坛友微信交流群
qoiqpwqr 发表于 2013-1-16 11:52
Owls$NestNight
版主能否解释一下这条命令为什么不对吗?多谢!
  1. ifelse(Owls$FoodTreatment == "Satiated", Owls$NestNight <- paste(Owls$Nest, "1",sep = "_"),
  2.                Owls$NestNight <- paste(Owls$Nest, "2",sep = "_"))
复制代码


使用道具

8
jmpamao 发表于 2013-1-17 00:06:17 |只看作者 |坛友微信交流群
Owls$NestNight <- ifelse(Owls$FoodTreatment=="Satiated",paste(Owls$Nest,"1",sep="_"),paste(Owls$Nest,"2",sep="_"))
yes,no,返回的值,如何赋与的问题吧。
呵呵, 可以想象其中的不同。

ps.还是 qoiqpwqr 兄的表达方式 最简洁。
已有 1 人评分学术水平 热心指数 信用等级 收起 理由
kaifengedu + 1 + 1 + 1 热心帮助其他会员

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

使用道具

9
kaifengedu 发表于 2013-1-17 06:19:31 |只看作者 |坛友微信交流群
jmpamao 发表于 2013-1-17 00:06
Owls$NestNight
您能具体解释一下本例的不同吗?我实在没想起有什么不同,在运行ifelse语句时结果也能出来,但是就是存不到Owls里.而用版主的方法或者我给的第二种方法都可以.

使用道具

10
jmpamao 发表于 2013-1-17 09:18:43 |只看作者 |坛友微信交流群
按照你之前的ifelse(...==",,",Owls$Night=paste(), OwlS$Night=paste())
ifelse 语句应该也是 可以这样表示
if(Owls$Food..==".."){
  Owls$NestNight=paste(,"1",sep)
}else{Owl$NestNight=paste()}

....hehe 是不是 那个多次的赋值给Owl$NestNight, 有点在玩弄电脑的感觉。
或者说 数据的结构不大清晰。
一起讨论吧, 这个问题 很有意思。

使用道具

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

本版微信群
加好友,备注cda
拉您进交流群

京ICP备16021002-2号 京B2-20170662号 京公网安备 11010802022788号 论坛法律顾问:王进律师 知识产权保护声明   免责及隐私声明

GMT+8, 2024-4-26 08:44