Thank you for your patience.
This is the output of dput(head(d, 10))
structure(list(V1 = structure(c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
1L, 1L), .Label = "9.9761E+11,", class = "factor"), V2 = structure(c(1L,
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L), .Label = "threat,", class = "factor"),
V3 = structure(c(1L, 28L, 37L, 48L, 55L, 63L, 73L, 88L, 2L,
20L), .Label = c("1,", "10,", "100,", "101,", "102,", "104,",
"107,", "108,", "109,", "110,", "111,", "112,", "113,", "114,",
"115,", "116,", "117,", "118,", "119,", "12,", "13,", "14,",
"15,", "16,", "17,", "18,", "19,", "2,", "20,", "21,", "22,",
"23,", "24,", "27,", "28,", "29,", "3,", "30,", "31,", "32,",
"33,", "34,", "35,", "36,", "37,", "38,", "39,", "4,", "42,",
"44,", "46,", "47,", "48,", "49,", "5,", "50,", "52,", "53,",
"54,", "55,", "57,", "59,", "6,", "60,", "61,", "62,", "63,",
"64,", "65,", "66,", "68,", "69,", "7,", "71,", "74,", "75,",
"76,", "78,", "81,", "82,", "83,", "84,", "85,", "86,", "87,",
"88,", "89,", "9,", "90,", "91,", "92,", "94,", "95,", "96,",
"97,", "98,"), class = "factor"), V4 = structure(c(1L, 2L,
1L, 2L, 2L, 2L, 2L, 2L, 1L, 1L), .Label = c("1,", "2,"), class = "factor"),
V5 = structure(c(2L, 2L, 2L, 1L, 2L, 1L, 1L, 2L, 2L, 2L), .Label = c("1,",
"2,"), class = "factor"), V6 = structure(c(2L, 1L, 2L, 2L,
1L, 2L, 2L, 1L, 2L, 2L), .Label = c("1,", "2,"), class = "factor"),
V7 = structure(c(2L, 1L, 2L, 2L, 2L, 2L, 1L, 2L, 1L, 2L), .Label = c("1,",
"2,"), class = "factor"), V8 = structure(c(41L, 92L, 63L,
36L, 2L, 81L, 12L, 14L, 23L, 33L), .Label = c("abduction,",
"abortion,", "abuse,", "accident,", "addicted,", "agony,",
"anger,", "angry,", "anguish,", "assault,", "bankrupt,",
"bullet,", "burial,", "cancer,", "cemetery,", "coffin,",
"corpse,", "crash,", "crisis,", "cruel,", "death,", "defeated,",
"depressed,", "deserted,", "despair,", "destroy,", "disaster,",
"disloyal,", "distress,", "dreadful,", "drown,", "dull,",
"dump,", "emaciated,", "failure,", "fatigue,", "fault,",
"feeble,", "fever,", "filth,", "forlorn,", "germs,", "gloomy,",
"hardship,", "hell,", "helpless,", "horror,", "hostage,",
"hostile,", "hurt,", "idiot,", "infest,", "injury,", "irritable,",
"jail,", "killer,", "lonely,", "malaria,", "messy,", "misery,",
"mistake,", "morbid,", "murder,", "mutilate,", "pain,", "panic,",
"poison,", "prison,", "pus,", "rape,", "rat,", "rejected,",
"sad,", "scum,", "shame,", "sick,", "slap,", "snake,", "spider,",
"suicide,", "surgery,", "terrible,", "tormented,", "trash,",
"trauma,", "ugly,", "ulcer,", "unease,", "unhappy,", "useless,",
"victim,", "wasp,", "weep,", "worm,", "wound,"), class = "factor"),
V9 = structure(c(24L, 90L, 73L, 10L, 92L, 33L, 84L, 96L,
70L, 57L), .Label = c("alley,", "ankle,", "appliance,", "audience,",
"bandage,", "bathroom,", "bookcase,", "border,", "branch,",
"cabinet,", "category,", "clean,", "cliff,", "cold,", "consider,",
"consoled,", "context,", "country,", "crop,", "dentist,",
"detail,", "dinner,", "doctor,", "dynamic,", "easygoing,",
"elbow,", "energetic,", "farm,", "faucet,", "flat,", "flowing,",
"fork,", "freezer,", "glass,", "grass,", "guess,", "humble,",
"icebox,", "industry,", "invisible,", "jug,", "lighting,",
"lion,", "listen,", "little,", "machine,", "metal,", "month,",
"mushroom,", "napkin,", "news,", "noisy,", "north,", "nudge,",
"number,", "numerous,", "obey,", "odd,", "oval,", "plant,",
"possible,", "pot,", "public,", "puzzled,", "quarter,", "rational,",
"ready,", "reflect,", "reliable,", "repentant,", "sand,",
"school,", "secret,", "series,", "shark,", "shoe,", "shop,",
"shortened,", "skyline,", "stable,", "storm,", "stove,",
"table,", "theory,", "tower,", "truck,", "upgrade,", "upright,",
"utensil,", "vest,", "vision,", "volcano,", "walk,", "watchful,",
"window,", "winter,"), class = "factor"), V10 = structure(c(1L,
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L), .Label = "NA,", class = "factor"),
V11 = structure(c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L), .Label = "NA,", class =
"factor"),
V12 = structure(c(2L, 1L, 2L, 2L, 2L, 2L, 1L, 2L, 1L, 2L), .Label =
c("203,",
"205,"), class = "factor"), V13 = structure(c(1L, 1L, 1L,
1L, 1L, 1L, 1L, 1L, 1L, 1L), .Label = "1,", class = "factor"),
V14 = c(4063L, 4914L, 1508L, 1819L, 1228L, 992L, 1898L, 1174L,
1294L, 1417L)), row.names = c(NA, 10L), class = "data.frame”)
When I use the following:
all.files <- list.files(".")
txt.files <- grep("threat.txt",all.files,value=T)
for(i in txt.files) {
d<-read.table(i, header=FALSE)
d[] <- lapply(d, function(x) {is.na(x) <- x == 0; x})
write.table(d,paste0(i, "trial.txt"), quote=FALSE, row.names=FALSE)}
I get this (an example of one of the output files with zeros in V13):
V1 V2 V3 V4 V5 V6 V7 V8 V9 V10 V11 V12 V13 V14
3.17903E+11, threat, 1, 1, 2, 2, 1, useless, flowing, NA, NA, 203, 1, 949
3.17903E+11, threat, 3, 2, 2, 1, 1, hostage, skyline, NA, NA, 203, 1, 1116
3.17903E+11, threat, 4, 1, 1, 1, 2, messy, ready, NA, NA, 205, 1, 1277
3.17903E+11, threat, 6, 2, 1, 2, 2, emaciated, shortened, NA, NA, 205, 1, 691
3.17903E+11, threat, 7, 1, 1, 1, 1, abuse, plant, NA, NA, 203, 1, 660
3.17903E+11, threat, 8, 2, 1, 2, 2, tormented, easygoing, NA, NA, 205, 1, 812
3.17903E+11, threat, 9, 1, 2, 2, 2, hurt, sand, NA, NA, 205, 1, 917
3.17903E+11, threat, 10, 1, 1, 1, 1, surgery, freezer, NA, NA, 203, 1, 1829
3.17903E+11, threat, 12, 2, 2, 1, 2, accident, category, NA, NA, 205, 1, 821
3.17903E+11, threat, 13, 2, 1, 2, 2, terrible, energetic, NA, NA, 205, 1, 783
3.17903E+11, threat, 14, 1, 2, 2, 1, wound, storm, NA, NA, 203, 1, 813
3.17903E+11, threat, 15, 1, 1, 1, 2, victim, utensil, NA, NA, 205, 1, 1132
3.17903E+11, threat, 16, 2, 2, 1, 2, bankrupt, lighting, NA, NA, 203, 0, 1510
3.17903E+11, threat, 17, 1, 1, 1, 2, anguish, country, NA, NA, 203, 0, 811
3.17903E+11, threat, 18, 2, 2, 1, 1, snake, table, NA, NA, 203, 1, 805
3.17903E+11, threat, 19, 1, 1, 1, 2, slap, crop, NA, NA, 205, 1, 1180
3.17903E+11, threat, 20, 2, 1, 2, 2, scum, shoe, NA, NA, 205, 1, 792
3.17903E+11, threat, 21, 1, 2, 2, 1, weep, shop, NA, NA, 203, 1, 870
3.17903E+11, threat, 23, 2, 1, 2, 1, spider, border, NA, NA, 203, 1, 871
str(d) gives me the following:
'data.frame': 96 obs. of 14 variables:
$ V1 : Factor w/ 1 level "9.9761E+11,": 1 1 1 1 1 1 1 1 1 1 ...
$ V2 : Factor w/ 1 level "threat,": 1 1 1 1 1 1 1 1 1 1 ...
$ V3 : Factor w/ 96 levels "1,","10,","100,",..: 1 28 37 48 55 63 73 88 2 20
...
$ V4 : Factor w/ 2 levels "1,","2,": 1 2 1 2 2 2 2 2 1 1 ...
$ V5 : Factor w/ 2 levels "1,","2,": 2 2 2 1 2 1 1 2 2 2 ...
$ V6 : Factor w/ 2 levels "1,","2,": 2 1 2 2 1 2 2 1 2 2 ...
$ V7 : Factor w/ 2 levels "1,","2,": 2 1 2 2 2 2 1 2 1 2 ...
$ V8 : Factor w/ 95 levels "abduction,","abortion,",..: 41 92 63 36 2 81 12
14 23 33 ...
$ V9 : Factor w/ 96 levels "alley,","ankle,",..: 24 90 73 10 92 33 84 96 70
57 ...
$ V10: Factor w/ 1 level "NA,": 1 1 1 1 1 1 1 1 1 1 ...
$ V11: Factor w/ 1 level "NA,": 1 1 1 1 1 1 1 1 1 1 ...
$ V12: Factor w/ 2 levels "203,","205,": 2 1 2 2 2 2 1 2 1 2 ...
$ V13: Factor w/ 1 level "1,": 1 1 1 1 1 1 1 1 1 1 ...
$ V14: int 4063 4914 1508 1819 1228 992 1898 1174 1294 1417 …
When I use this:
for(i in txt.files) {
d<-read.table(i, header=FALSE)
d2<-d[d$V13==1,]
write.table(d2,sub("[.]",".trial.",i),quote=FALSE,row.names=FALSE)
}
I get empty files:
str(d2)
'data.frame': 0 obs. of 14 variables:
$ V1 : Factor w/ 1 level "9.9761E+11,":
$ V2 : Factor w/ 1 level "threat,":
$ V3 : Factor w/ 96 levels "1,","10,","100,",..:
$ V4 : Factor w/ 2 levels "1,","2,":
$ V5 : Factor w/ 2 levels "1,","2,":
$ V6 : Factor w/ 2 levels "1,","2,":
$ V7 : Factor w/ 2 levels "1,","2,":
$ V8 : Factor w/ 95 levels "abduction,","abortion,",..:
$ V9 : Factor w/ 96 levels "alley,","ankle,",..:
$ V10: Factor w/ 1 level "NA,":
$ V11: Factor w/ 1 level "NA,":
$ V12: Factor w/ 2 levels "203,","205,":
$ V13: Factor w/ 1 level "1,":
$ V14: int
When I use as.integer to change V13 to an integer, the output of this column is
replaced by 1s and 2s..
On Apr 21, 2020, at 1:14 AM, Rui Barradas <ruipbarra...@sapo.pt> wrote:
Hello,
Thanks for the data. But since the replacements still do not work, please post
the output of
dput(head(d, 10))
in order for us to have an *exact* copy of the data structure.
I had asked for 20 or 30 rows but given your post 10 are enough.
With a way to exactly reproduce what you have, it will be much easier to try
code and find a solution. I, and I believe most R users, will run
str(d)
as one of the first steps to know what is in that problem column. And go from
there.
Hope this helps,
Rui Barradas
Às 04:52 de 21/04/20, Helen Sawaya escreveu:
Thank you all for your input.
This is an example of one data file (I have 74 data files):
2.90546E+11, threat, 1, 2, 1, 2, 1, death, stove,
NA, NA, 205, 0, 394
2.90546E+11, threat, 2, 2, 2, 1, 1, emaciated, shortened,
NA, NA, 205, 0, 502
2.90546E+11, threat, 3, 1, 1, 1, 2, mutilate, consider,
NA, NA, 205, 1, 468
2.90546E+11, threat, 6, 1, 2, 2, 1, weep, shop,
NA, NA, 203, 1, 345
2.90546E+11, threat, 9, 2, 1, 2, 2, tormented, easygoing,
NA, NA, 205, 1, 373
2.90546E+11, threat, 10, 1, 2, 2, 2, snake, table,
NA, NA, 205, 1, 343
2.90546E+11, threat, 11, 2, 2, 1, 1, crisis, faucet,
NA, NA, 203, 1, 437
2.90546E+11, threat, 12, 1, 1, 1, 1, victim, utensil,
NA, NA, 203, 1, 343
2.90546E+11, threat, 14, 1, 2, 2, 1, depressed, repentant,
NA, NA, 203, 1, 441
2.90546E+11, threat, 15, 2, 2, 1, 2, scum, shoe,
NA, NA, 205, 1, 475
Column 13 has values of 0s and 1s which my cognitive task outputted. Column 14
is the reaction time (ms) data. I want to get rid of the rows that contain
zeros so I thought I'd first replace zeros with NAs then use complete.cases
function to get rid of the NAs. I also wanted to apply other functions so I
included them all in a loop. All work fine except for the one where I try to
turn the zeros to NAs.
Jim when I tried your mockdata example, it worked fine. But when I translated
it to my data, I still get zeros in the output. Can you identify any
mistranslations I'm doing?
txt.files<-list.files(".",pattern="dotprobe") #all my data files are text files
in one folder
for(tf in txt.files) {
d<-read.table(tf)
d[,13][d[,13]==0]<-NA #column 13 contains zeros
d<-d[ ,-c(10,11)] #get rid of columns 10 and 11
write.table(d,sub("[.]",".tlbs.",tf),quote=FALSE, row.names=FALSE)
}
That's an example of one of the output I get:
V1 V2 V3 V4 V5 V6 V7 V8 V9 V12 V13 V14
2.90546E+11, threat, 1, 2, 1, 2, 1, death, stove, 205, 0, 394
2.90546E+11, threat, 2, 2, 2, 1, 1, emaciated, shortened, 205, 0, 502
2.90546E+11, threat, 3, 1, 1, 1, 2, mutilate, consider, 205, 1, 468
2.90546E+11, threat, 6, 1, 2, 2, 1, weep, shop, 203, 1, 345
2.90546E+11, threat, 9, 2, 1, 2, 2, tormented, easygoing, 205, 1, 373
2.90546E+11, threat, 10, 1, 2, 2, 2, snake, table, 205, 1, 343
Columns 10 and 11 were deleted. But zeros were not replaced by NAs.
After all the data cleaning, the functions I'm interested in including in the
loop are: get_tlbs and summarize_bias (and these also work fine in my loop).
Thanks again 🙂
Sincerely
Helen
------------------------------------------------------------------------
*From:* Jim Lemon <drjimle...@gmail.com>
*Sent:* Tuesday, April 21, 2020 2:52 AM
*To:* Rui Barradas <ruipbarra...@sapo.pt>
*Cc:* Helen Sawaya <helensaw...@hotmail.com>; Michael Dewey
<li...@dewey.myzen.co.uk>; r-help@R-project.org <r-help@r-project.org>
*Subject:* Re: [R] NA command in a 'for' loop
Hi Helen,
Your problem may lie in using row.names=TRUE. I was puzzled when an
extra column kept popping up in the output files. For reading in and
replacing zeros with NAs, this seems to work:
for(mockdata in 1:3) {
mdf<-data.frame(sample(2:20,10),sample(2:20,10),sample(0:1,10,TRUE))
write.table(mdf,file=paste0("threat",mockdata,".txt"),quote=FALSE,
row.names=FALSE,col.names=FALSE)
}
txt.files<-list.files(".",pattern="threat[1-3]")
for(tf in txt.files) {
d<-read.table(tf)
d[,3][d[,3]==0]<-NA
write.table(d,sub("[.]",".tbls.",tf),quote=FALSE,row.names=FALSE)
}
Jim
On Tue, Apr 21, 2020 at 7:57 AM Rui Barradas <ruipbarra...@sapo.pt> wrote:
Hello,
I believe the only way we have to see what is happening is for you to
post the output of
dput(head(d, 20)) # or 30
or, with d2 a subset of d that includes zeros,
dput(head(d2, 20))
Hope this helps,
Rui Barradas
Às 17:48 de 20/04/20, Helen Sawaya escreveu:
I have one column that represents correct response versus error (correct
is coded as 1 and error is coded as 0). Nowhere else in the dataset are
there values of 0. The vector is treated as an integer.
------------------------------------------------------------------------
*From:* Michael Dewey <li...@dewey.myzen.co.uk>
*Sent:* Monday, April 20, 2020 7:35 PM
*To:* Helen Sawaya <helensaw...@hotmail.com>; Rui Barradas
<ruipbarra...@sapo.pt>; r-help@R-project.org <r-help@R-project.org>
*Subject:* Re: [R] NA command in a 'for' loop
Just a thought Helen but is x being treated as a real and what you think
are zero and are printed as zero are in fact some very small number? If
so you need to alter your test appropriately.
Michael
On 20/04/2020 17:25, Helen Sawaya wrote:
Thank you for your reply.
I tried d[] <- lapply(d, function(x) {is.na(x) <- x == 0; x})
but I am still getting zeros instead of NAs in my output..
I wonder if the problem is that some of my data files don't have any zeros
(participants made no errors)..
________________________________
From: Rui Barradas <ruipbarra...@sapo.pt>
Sent: Monday, April 20, 2020 9:05 AM
To: Helen Sawaya <helensaw...@hotmail.com>; r-help@R-project.org
<r-help@R-project.org>
Subject: Re: [R] NA command in a 'for' loop
Hello,
Instead of
d[d == 0] <- NA
try
d[] <- lapply(d, function(x) {is.na(x) <- x == 0; x})
Also, in the first for loop
paste(i, sep = "")
does nothing, it's the same as i.
And the same for
(d2$V4 == 1) == TRUE
Since (d2$V4 == 1) already is FALSE/TRUE there is no need for
(.) == TRUE
Hope this helps,
Rui Barradas
Às 20:52 de 19/04/20, Helen Sawaya escreveu:
Dear R experts,
I am using a 'for' loop to apply commands to multiple datasets (each file is one
participant). The only one not working is the command that identifies zeros in my
datasets and changes them to NAs. But when I look at the output, zeros ("0")
are still present. Surprisingly, the functions work fine when I apply them to a single
dataset (outside the loop). I've tried:
all.files <- list.files(".")
txt.files <- grep("threat.txt",all.files,value=T)
for(i in txt.files){
d <- read.table(paste(i,sep=""),header=F)
d[d==0] <- NA #replace zeros with NA
write.table(d, paste0(i,".tlbs.txt"), quote=FALSE, row.names=TRUE)}
d<-d[ ,-c(10,11)]
d2<-d[complete.cases(d), ]
d2$V4<-as.numeric(d2$V4)
congruent <- (d2$V4 == 1) == TRUE
x <- get_tlbs(d2$V14, congruent, prior_weights = NULL, method =
"weighted", fill_gaps = FALSE)
write.table(x, paste0(i,".tlbs.txt"), quote=FALSE, row.names=TRUE)}
I've also tried:
for(i in txt.files){
d <- read.table(paste(i,sep=""),header=F)
if (0 %in% d)
{replace_with_na(d,replace = list(x = 0))} # replace zeros with NA
d<-d[ ,-c(10,11)]
d2<-d[complete.cases(d), ]
d2$V4<-as.numeric(d2$V4)
congruent <- (d2$V4 == 1) == TRUE
x <- get_tlbs(d2$V14, congruent, prior_weights = NULL, method =
"weighted", fill_gaps = FALSE)
write.table(x, paste0(i,".summaryoutput.txt"), quote=FALSE,
row.names=TRUE)}
Thank you for your help.
Sincerely
Helen
[[alternative HTML version deleted]]
______________________________________________
R-help@r-project.org mailing list -- To UNSUBSCRIBE and more, see
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.
[[alternative HTML version deleted]]
______________________________________________
R-help@r-project.org mailing list -- To UNSUBSCRIBE and more, see
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.
--
Michael
http://www.dewey.myzen.co.uk/home.html
______________________________________________
R-help@r-project.org mailing list -- To UNSUBSCRIBE and more, see
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.