找回密码
 立即注册
查看: 6176|回复: 1

创建新变量,条件是在A=1,B=2情况下值为3,求代码?—R-China常见问题解决方案汇编(10)

[复制链接]
发表于 2013-3-3 23:58:12 | 显示全部楼层 |阅读模式
转载请注明出处,来自:R语言中文网:http://www.r-china.net
来自本论坛R语言学习QQ群74076289的讨论问题:

童鞋A: 11:22:01
请教一个问题啊,想创建新变量GDP,但要求在Country=1, Year=2000情况下为值,比如,10000,命令应该怎么写啊
童鞋B: 11:32:36
你应该有一个数据集合吧。比如data,想生成一个新变量GDP.
GDP<-rep(0,nrow(data));
GDP[data[,"Country"]==1&data[,"Year"]==2000]==10000
童鞋A: 11:37:06
我先试试行不行吧,刚运行了一个,出现了一堆FALSE
童鞋A: 11:37:24
估计是浅一些数据都不是符合条件数据缘故
童鞋A: 11:39:22
不对啊
童鞋A: 11:39:27
我summary了一下
童鞋A: 11:39:35
Min. 1st Qu.  Median    Mean 3rd Qu.    Max.
      0       0       0       0       0       0
童鞋A: 11:39:42
summary(GDP)
童鞋B: 11:42:06
你是想生成一个新变量。还是想从原数据集中提取一个这个变量。只是设定几个条件而已
童鞋A: 11:42:22
生成新变量
童鞋A: 11:43:22
有国家15个,年数两年
童鞋A: 11:44:27
数据是基于个人的,但我想生成一个country level的变量
童鞋B: 11:45:19
GDP<-rep(0,nrow(data));
GDP[data[,"Country"]==1&data[,"Year"]==2000]=10000
童鞋B: 11:45:28
你再试一下
童鞋A: 11:45:40
这个是一行么?
童鞋B: 11:46:09
两行
童鞋A: 11:46:14
我刚才是按两行输入的,分号前后各一行
童鞋B: 11:46:16
你直接拷贝粘贴就行。
童鞋B: 11:46:21
恩。
童鞋A: 11:46:42
然后结果是
童鞋A: 11:46:44
> summary(GDP)
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max.
      0       0       0       0       0       0
> table(GDP)
GDP
     0
160846
童鞋B: 11:47:01
你原始数据啥样的
童鞋A: 11:47:15
就是survey
童鞋A: 11:47:26
每个人对各种问题的回答
童鞋B: 11:47:28
你data是啥
童鞋B: 11:47:37
你粘一个例子。
童鞋B: 11:48:10
我这个例子中class(data)是 data.frame
童鞋B: 11:48:15
你用对了嘛
童鞋A: 11:48:19

童鞋A: 11:49:09
> is.data.frame(data2000)
[1] TRUE
童鞋A: 11:49:31
这是我写的命令
童鞋A: 11:49:35
GDP=rep(0,nrow(data2000))
GDP[data2000[,"nation2"]==1&data2000[,"year"]==2000]==1326334899576.19
童鞋B: 11:49:37

童鞋A: 11:50:02
就是你那个,然后我把colnames改成我这个数据的名字了
童鞋B: 11:50:03
class(data2000[,"nation2"])
童鞋B: 11:50:07
结果是什么
童鞋A: 11:50:20
integer
童鞋B: 11:50:37
class(data2000[,"year"])
童鞋B: 11:50:41
这个呢
童鞋A: 11:51:13
也是integer
童鞋A: 11:51:19
你那个命令输完了是这样的
墨魂(654608871) 11:51:22
你直接read.csv or read.xlsx
墨魂(654608871) 11:51:35
读进去就是data frame
童鞋A: 11:51:45

童鞋A: 11:51:56
所以我改成了replace又试了一下
童鞋A: 11:51:59
可结果一样
童鞋B: 11:52:10
GDP=rep(0,nrow(data2000))
GDP[data2000[,"nation2"]==1&data2000[,"year"]==2000]=1326334899576.19
童鞋B: 11:52:16
你刚才写错了。
童鞋B: 11:52:22
你用这个。
童鞋B: 11:52:36
我后来给你改的。不是两个==,是一个=
童鞋B: 11:52:46
童鞋A: 11:53:02
是,我也注意到了
童鞋B: 11:53:16
你再试试
童鞋A: 11:53:21
行了!
童鞋A: 11:53:25
太感谢了!!
童鞋A: 11:53:29
感激涕零!
童鞋A: 11:53:35
而且又学了一种新方法
童鞋A: 11:53:40
不用老replace了
童鞋B: 11:53:42
这个是新生成的变量。你可以加到原始数据中。
童鞋A: 11:53:47
谢谢!
童鞋A: 11:54:13
而replace只是生成一个变量是吧?这俩还是不一样的
童鞋A: 11:54:25
生成一个vector我是说
童鞋B: 11:54:46
行了就好。主要看你要啥结果。有不同的操作方式

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
回复

使用道具 举报

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

本版积分规则

Archiver|手机版|小黑屋|R语言中文网

GMT+8, 2024-11-22 07:33 , Processed in 0.040133 second(s), 17 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表